カニゲーム攻略日記ブログ

beatmaniaIIDXやハースストーンなどのゲーム攻略日記。主にまったり勢。2016年にIIDX皆伝になった

progate Ruby on Rails 6講座目

progate Ruby on Rails 6講座目

Progateの、Ruby on Rails
6講座目をやったメモ
気になったことをメモしたのでprogateと関係ないこともある

余談

6講座目はこれまでの復習って感じだったので
平日でもぎりぎり1日でおわた

しかしもっと学習したいぞ
と思って調べたら
テキスト読み上げ機能で
全てを学習時間にするってのがあった
明日から車通勤2時間の間で使ってみようかな
(子供と遊んでいる時とかは使わない方がいいけどね)

UdemyのAWS講座を車の中で流してたのだけど
わけわからん単語多すぎて効率悪かったので
わけわかるやつを流す方針

ユーザー登録

データ型のtextとstringの使い分け

データ型 説明 使い分けの例
string 短いテキストデータを保存するのに適したデータ型。一般的には 255 文字まで。 ユーザー名、メールアドレス、パスワードなど。
text 長いテキストデータを保存するのに適したデータ型。数千から数万文字まで可能。 ブログ記事、コメント、製品の説明、レビューなど。

rails db:migrate」の動作

  1. rails db:migrate コマンドが実行される。
  2. Railsdb/migrate ディレクトリ内のマイグレーションファイルを確認する。
  3. マイグレーションファイルが実行されていない場合(すなわち、schema_migrations テーブルにそのバージョンが存在しない場合)、Railsマイグレーションファイルの changeup、または down メソッドを実行する。
  4. 指定されたメソッドが実行されることにより、データベースの構造が変更される(テーブルの作成、カラムの追加/削除など)。
  5. マイグレーションが正常に完了すると、schema_migrations テーブルにそのバージョンが記録され、次回の rails db:migrate 実行時にはそのマイグレーションがスキップされる。
  6. db/schema.rb ファイルが更新され、データベースの現在の状態が反映される。これにより、他の開発者や環境でデータベース構造を同期できるようになる。

schema_migrations テーブルにそのバージョンが存在しない場合の具体例

schema_migrations テーブルにそのバージョンが存在しない場合とは、マイグレーションファイルがまだ実行されていない状況を指します。具体例を以下に示します。

  1. あなたは新たなマイグレーションファイル 20220101123456_create_posts.rb を作成しました。このファイルは、posts テーブルを作成するためのマイグレーションです。
  2. この時点では、schema_migrations テーブルにはこのマイグレーションのバージョン(20220101123456)はまだ存在していません。
  3. あなたが rails db:migrate コマンドを実行すると、Railsschema_migrations テーブルを確認し、どのマイグレーションファイルが実行されていないかを判断します。
  4. 20220101123456_create_posts.rb ファイルがまだ実行されていないため、Rails はこのファイルのマイグレーションを実行します。これにより、posts テーブルがデータベースに作成されます。
  5. マイグレーションが成功すると、schema_migrations テーブルにそのバージョン(20220101123456)が追加されます。これにより、次回 rails db:migrate コマンドを実行した際に、このマイグレーションがスキップされます。

マイグレーションファイルの change、up、または down メソッド

マイグレーションファイルの changeup、および down メソッドは、データベースの構造を変更するために使用されるメソッドです。それぞれのメソッドの違いと使用例を表にまとめました。

メソッド 説明 使用例
change マイグレーションの変更を定義し、Rails が自動的にロールバック操作を推測する。 add_column :posts, :title, :string
up マイグレーションを実行する際に適用される変更を定義し、マイグレーションが進む方向を指定する。 create_table :posts do |t|; t.string :title; end
down マイグレーションロールバックする際に適用される変更を定義し、マイグレーションが戻る方向を指定する。 drop_table :posts

change メソッドは、ほとんどの一般的なマイグレーションで使用され、Rails が適切なロールバック操作を自動的に推測できる場合に便利です。ただし、推測できない複雑なマイグレーションの場合は、up および down メソッドを使用して、マイグレーションの進行方向とロールバック方向を明示的に定義する必要があります。

db/schema.rb ファイルが、データベースの現在の状態?

はい、その通りです。db/schema.rbファイルは、データベースの現在の状態を表すスキーマ定義ファイルです。このファイルは、マイグレーションが実行されるたびに自動的に更新され、データベースの構造を反映しています。

db/schema.rbファイルは、新しい開発環境のセットアップやデータベースをリセットする際に役立ちます。rake db:schema:loadコマンドを実行すると、db/schema.rbファイルに基づいてデータベースの構造が再現されます。これにより、すべてのマイグレーションを順番に適用することなく、データベースの状態を効率的に同期することができます。

assetの名前の由来

"Asset"(アセット)という言葉は、一般的には企業や個人が所有する貴重な資産やリソースを指します。Web開発の文脈では、「アセット」とは、ウェブアプリケーションにおいて重要な役割を果たす静的ファイル(CSSJavaScript、画像ファイルなど)を指します。

これらの静的ファイルは、ウェブアプリケーションのデザインや機能を向上させるために用いられ、アプリケーション全体の価値を高めるものです。そのため、ウェブ開発の世界ではこれらの静的ファイルを「アセット」と呼び、開発者が管理しやすいように編成・最適化されています。

新規登録はsignupというのじゃ

はい、その通りです!Webアプリケーションにおいて、新規登録の機能は一般的に「signup」と呼ばれます。ユーザーがアカウントを作成する際に、必要な情報(例えば、メールアドレス、パスワード、名前など)を入力して、サービスを利用できるようになるプロセスを指します。これに対して、既存のアカウントを使用してサービスにアクセスする機能は「signin」と呼ばれます。

newとsignup

確かに、new と signup の違いについて混乱することがありますね。しかし、実際には、それぞれ異なる目的があります。以下の表で、それらの違いを説明します。

Action Purpose Description
new Render the form 新規登録フォームを表示するためのアクションです。
signup Process the form 新規登録フォームから送信されたデータを処理し、ユーザーを登録するアクションです。
  • new: 通常、new アクションは新規登録フォームを表示するために使われます。これは単にフォームをレンダリングするだけで、データベースへの保存は行いません。
  • signup: 一方、signup アクションは、フォームから送信されたデータを処理し、ユーザーをデータベースに登録するために使われます。このアクションが呼ばれたときに、バリデーションやエラー処理などが行われ、成功すればデータが保存されます。

このように、new と signup の違いは、主にアクションが行う処理にあります。new はフォームの表示を担当し、signup はデータの登録処理を行います。

Render the formとProcess the formとは?

「Render the form」と「Process the form」は、フォームに関連する異なるアクションを指します。以下にそれぞれの意味を説明します。

  1. Render the form(フォームをレンダリングする): フォームをレンダリングするとは、フォームを画面に表示することを意味します。通常、フォームに入力するためにユーザーに提示されるHTML要素が含まれています。これは、ユーザーがデータを入力し、送信できるようにするための手続きです。

  2. Process the form(フォームを処理する): フォームを処理するとは、ユーザーが入力したデータを受け取り、それに基づいて何らかのアクションを実行することを意味します。フォームが送信されると、サーバー側でデータが受信され、バリデーション、データベースへの保存、他の処理が行われます。フォームの処理は、通常、コントローラー内のアクションで実装されます。

簡単に言えば、「Render the form」はフォームを表示するステップで、「Process the form」はフォームから送信されたデータを処理するステップです。

users/create

form_tagの復習

<%= form_tag("/users/create") do %>

<% end %>

form_tagの動作を説明するための番号付きリストを以下に示します。

  1. form_tagメソッドを呼び出す: ビューファイル内でform_tagメソッドを呼び出し、フォームを生成するためのHTMLタグを作成します。

  2. URLとHTTPメソッドを指定: form_tagメソッドの第一引数に、フォームのデータが送信されるURLを指定します。オプションで、HTTPメソッド(GET、POST、PUT、DELETEなど)も指定できます。

  3. ブロックを開始: form_tagメソッドにdoとendを使ってブロックを開始します。このブロックの中に、フォーム内に配置するフィールドやボタンを定義します。

  4. フォーム要素を追加: ブロック内で、各種フォーム要素(テキストボックス、ラジオボタンチェックボックスなど)を追加します。これらの要素は、ユーザーがデータを入力し、送信するために使用します。

  5. 送信ボタンを追加: 通常、フォーム内に送信ボタンを追加します。ユーザーがこのボタンをクリックすると、フォームのデータが指定されたURLに送信され、指定されたHTTPメソッドで処理されます。

  6. ブロックを終了: form_tagブロックをendで終了させ、フォームの定義を完了します。

  7. フォームをレンダリング: Railsアプリケーションがビューをレンダリングし、ユーザーがブラウザでフォームを見ることができます。

  8. フォームデータを送信: ユーザーがフォームに入力し、送信ボタンをクリックすると、フォームデータが指定されたURLとHTTPメソッドで送信され、サーバー側で処理されます。

これらのステップが、form_tagを使用したフォームの一般的な動作を示しています。

<%= %> と <% %> の復習

<%= %><% %>の違いを表にまとめます。

シンボル 説明
<%= %> Rubyコードを評価し、結果をHTMLに出力します。 <%= "Hello, World!" %>
<% %> Rubyコードを評価しますが、結果をHTMLに出力しません。主に制御構造に使用されます。 <% if true %> ... <% end %>

この表により、<%= %>は結果を出力する場合に使用し、<% %>は出力せずにコードの評価のみを行う場合に使用することが分かります。これにより、Railsのビューで適切なシンボルを使い分けることができます。

form_tagはHTMLに出力しているの?

はい、form_tagはHTMLに出力しています。form_tagRailsのヘルパーメソッドであり、フォームの開始タグと終了タグを生成し、それをHTML形式で出力します。これにより、ブラウザで表示されるHTMLフォームが正しく構築されます。

form_tagは、<%= %>を使ってHTMLに出力する必要があります。なぜなら、ブラウザはフォームの構造を正しく解釈し、ユーザーが入力したデータを適切にサーバーに送信できるようにするためです。以下はform_tagの使用例です。

<%= form_tag("/search", method: "get") do %>
  <%= label_tag(:query, "Search for:") %>
  <%= text_field_tag(:query) %>
  <%= submit_tag("Search") %>
<% end %>

このコードは、次のようなHTMLフォームを生成して出力します。

<form action="/search" method="get">
  <label for="query">Search for:</label>
  <input type="text" name="query" id="query">
  <input type="submit" value="Search">
</form>

form_tagを使うことで、HTMLフォームを簡単に生成し、ブラウザとサーバー間でデータの送受信がスムーズに行われるようになります。

input nameのnameの由来は?

name属性の名前の由来は、HTMLの<input>要素において、この属性がその要素を識別するための名前を提供することです。フォームが送信されると、name属性はサーバーに送信されるデータのキーとして機能し、そのキーに関連付けられた値(value属性で指定された値)がサーバーで処理されます。このように、name属性は入力要素の識別子の役割を果たし、サーバー側でフォームデータを処理する際に重要な役割を担っています。

HTMLのフォームとは?

HTMLのフォームとは、ウェブページ上でユーザーがデータを入力し、そのデータをサーバーに送信するためのインターフェイスです。フォームは、テキスト入力、選択リスト、チェックボックスラジオボタン、ボタンなど、さまざまな種類の入力要素で構成されています。

  1. User: フォームにデータを入力し、送信ボタンをクリックします。
  2. Browser: <form>タグによって定義されたフォームデータをHTTPリクエストとして送信します。
  3. Server: 受信したHTTPリクエストからフォームデータを取り出し、適切な処理を行います(データベースに保存する、他の処理を行うなど)。
  4. Server: 必要に応じて、HTTPレスポンスをブラウザに返します(例: リダイレクト、成功/失敗メッセージなど)。
  5. Browser: HTTPレスポンスに基づいて、ユーザーに適切な結果を表示します。

railsのブロックを使うのに何故doとendが必要?

Railsではなく、Ruby言語自体の機能として、ブロックを使用する際にdoendが必要です。Rubyのブロックは、一連のコードをグループ化し、他のメソッドに渡すために使用されます。

doendは、ブロックの開始と終了を示すために使われます。これにより、ブロック内のコードが他のコードと区別され、正しく実行されるようになります。

例えば、Rubyの配列のeachメソッドを使って要素を反復処理する際には、以下のようにdoendでブロックを定義します。

array = [1, 2, 3]
array.each do |element|
  puts element
end

この例では、doがブロックの開始を示し、endがブロックの終了を示しています。|element|の部分は、ブロック内で使用する変数を宣言しています。このように、doendRubyのブロック機能において重要な役割を果たしています。