progate Ruby on Rails 6講座目
Progateの、Ruby on Rails
6講座目をやったメモ
気になったことをメモしたのでprogateと関係ないこともある
余談
6講座目はこれまでの復習って感じだったので
平日でもぎりぎり1日でおわた
しかしもっと学習したいぞ
と思って調べたら
テキスト読み上げ機能で
全てを学習時間にするってのがあった
明日から車通勤2時間の間で使ってみようかな
(子供と遊んでいる時とかは使わない方がいいけどね)
UdemyのAWS講座を車の中で流してたのだけど
わけわからん単語多すぎて効率悪かったので
わけわかるやつを流す方針
ユーザー登録
データ型のtextとstringの使い分け
データ型 | 説明 | 使い分けの例 |
---|---|---|
string | 短いテキストデータを保存するのに適したデータ型。一般的には 255 文字まで。 | ユーザー名、メールアドレス、パスワードなど。 |
text | 長いテキストデータを保存するのに適したデータ型。数千から数万文字まで可能。 | ブログ記事、コメント、製品の説明、レビューなど。 |
「rails db:migrate」の動作
rails db:migrate
コマンドが実行される。- Rails は
db/migrate
ディレクトリ内のマイグレーションファイルを確認する。 - マイグレーションファイルが実行されていない場合(すなわち、
schema_migrations
テーブルにそのバージョンが存在しない場合)、Rails はマイグレーションファイルのchange
、up
、またはdown
メソッドを実行する。 - 指定されたメソッドが実行されることにより、データベースの構造が変更される(テーブルの作成、カラムの追加/削除など)。
- マイグレーションが正常に完了すると、
schema_migrations
テーブルにそのバージョンが記録され、次回のrails db:migrate
実行時にはそのマイグレーションがスキップされる。 db/schema.rb
ファイルが更新され、データベースの現在の状態が反映される。これにより、他の開発者や環境でデータベース構造を同期できるようになる。
schema_migrations
テーブルにそのバージョンが存在しない場合の具体例
schema_migrations
テーブルにそのバージョンが存在しない場合とは、マイグレーションファイルがまだ実行されていない状況を指します。具体例を以下に示します。
- あなたは新たなマイグレーションファイル
20220101123456_create_posts.rb
を作成しました。このファイルは、posts
テーブルを作成するためのマイグレーションです。 - この時点では、
schema_migrations
テーブルにはこのマイグレーションのバージョン(20220101123456
)はまだ存在していません。 - あなたが
rails db:migrate
コマンドを実行すると、Rails はschema_migrations
テーブルを確認し、どのマイグレーションファイルが実行されていないかを判断します。 20220101123456_create_posts.rb
ファイルがまだ実行されていないため、Rails はこのファイルのマイグレーションを実行します。これにより、posts
テーブルがデータベースに作成されます。- マイグレーションが成功すると、
schema_migrations
テーブルにそのバージョン(20220101123456
)が追加されます。これにより、次回rails db:migrate
コマンドを実行した際に、このマイグレーションがスキップされます。
マイグレーションファイルの change、up、または down メソッド
マイグレーションファイルの change
、up
、および 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開発の文脈では、「アセット」とは、ウェブアプリケーションにおいて重要な役割を果たす静的ファイル(CSS、JavaScript、画像ファイルなど)を指します。
これらの静的ファイルは、ウェブアプリケーションのデザインや機能を向上させるために用いられ、アプリケーション全体の価値を高めるものです。そのため、ウェブ開発の世界ではこれらの静的ファイルを「アセット」と呼び、開発者が管理しやすいように編成・最適化されています。
新規登録は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」は、フォームに関連する異なるアクションを指します。以下にそれぞれの意味を説明します。
Render the form(フォームをレンダリングする): フォームをレンダリングするとは、フォームを画面に表示することを意味します。通常、フォームに入力するためにユーザーに提示されるHTML要素が含まれています。これは、ユーザーがデータを入力し、送信できるようにするための手続きです。
Process the form(フォームを処理する): フォームを処理するとは、ユーザーが入力したデータを受け取り、それに基づいて何らかのアクションを実行することを意味します。フォームが送信されると、サーバー側でデータが受信され、バリデーション、データベースへの保存、他の処理が行われます。フォームの処理は、通常、コントローラー内のアクションで実装されます。
簡単に言えば、「Render the form」はフォームを表示するステップで、「Process the form」はフォームから送信されたデータを処理するステップです。
users/create
form_tagの復習
<%= form_tag("/users/create") do %> <% end %>
form_tagの動作を説明するための番号付きリストを以下に示します。
form_tagメソッドを呼び出す: ビューファイル内でform_tagメソッドを呼び出し、フォームを生成するためのHTMLタグを作成します。
URLとHTTPメソッドを指定: form_tagメソッドの第一引数に、フォームのデータが送信されるURLを指定します。オプションで、HTTPメソッド(GET、POST、PUT、DELETEなど)も指定できます。
ブロックを開始: form_tagメソッドにdoとendを使ってブロックを開始します。このブロックの中に、フォーム内に配置するフィールドやボタンを定義します。
フォーム要素を追加: ブロック内で、各種フォーム要素(テキストボックス、ラジオボタン、チェックボックスなど)を追加します。これらの要素は、ユーザーがデータを入力し、送信するために使用します。
送信ボタンを追加: 通常、フォーム内に送信ボタンを追加します。ユーザーがこのボタンをクリックすると、フォームのデータが指定されたURLに送信され、指定されたHTTPメソッドで処理されます。
ブロックを終了: form_tagブロックをendで終了させ、フォームの定義を完了します。
フォームをレンダリング: Railsアプリケーションがビューをレンダリングし、ユーザーがブラウザでフォームを見ることができます。
フォームデータを送信: ユーザーがフォームに入力し、送信ボタンをクリックすると、フォームデータが指定されたURLとHTTPメソッドで送信され、サーバー側で処理されます。
これらのステップが、form_tagを使用したフォームの一般的な動作を示しています。
<%= %> と <% %> の復習
<%= %>
と<% %>
の違いを表にまとめます。
シンボル | 説明 | 例 |
---|---|---|
<%= %> |
Rubyコードを評価し、結果をHTMLに出力します。 | <%= "Hello, World!" %> |
<% %> |
Rubyコードを評価しますが、結果をHTMLに出力しません。主に制御構造に使用されます。 | <% if true %> ... <% end %> |
この表により、<%= %>
は結果を出力する場合に使用し、<% %>
は出力せずにコードの評価のみを行う場合に使用することが分かります。これにより、Railsのビューで適切なシンボルを使い分けることができます。
form_tagはHTMLに出力しているの?
はい、form_tag
はHTMLに出力しています。form_tag
はRailsのヘルパーメソッドであり、フォームの開始タグと終了タグを生成し、それを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のフォームとは、ウェブページ上でユーザーがデータを入力し、そのデータをサーバーに送信するためのインターフェイスです。フォームは、テキスト入力、選択リスト、チェックボックス、ラジオボタン、ボタンなど、さまざまな種類の入力要素で構成されています。
- User: フォームにデータを入力し、送信ボタンをクリックします。
- Browser:
<form>
タグによって定義されたフォームデータをHTTPリクエストとして送信します。 - Server: 受信したHTTPリクエストからフォームデータを取り出し、適切な処理を行います(データベースに保存する、他の処理を行うなど)。
- Server: 必要に応じて、HTTPレスポンスをブラウザに返します(例: リダイレクト、成功/失敗メッセージなど)。
- Browser: HTTPレスポンスに基づいて、ユーザーに適切な結果を表示します。
railsのブロックを使うのに何故doとendが必要?
Railsではなく、Ruby言語自体の機能として、ブロックを使用する際にdo
とend
が必要です。Rubyのブロックは、一連のコードをグループ化し、他のメソッドに渡すために使用されます。
do
とend
は、ブロックの開始と終了を示すために使われます。これにより、ブロック内のコードが他のコードと区別され、正しく実行されるようになります。
例えば、Rubyの配列のeach
メソッドを使って要素を反復処理する際には、以下のようにdo
とend
でブロックを定義します。
array = [1, 2, 3] array.each do |element| puts element end
この例では、do
がブロックの開始を示し、end
がブロックの終了を示しています。|element|
の部分は、ブロック内で使用する変数を宣言しています。このように、do
とend
はRubyのブロック機能において重要な役割を果たしています。