フォームとモデルについて
チャプター6からちょっと勉強方法を変えてみた。
メモを少なめにとることにする。
モデルとフォームの連携
データベースからデータを取り出しフォームに表示してユーザーの操作によって情報を更新するという
一連の流れは、コントローラではモデルのオブジェクトをテンプレートに渡しテンプレートではそのオブジェクトを使って
HTMLのフォームを作成する。
フォームからデータが送信されたときは送信されたデータをモデルに渡すことで、データベースに保存できる。
フォームから送信されたデータはparamsメソッドを使って取り出す。
Membersモデルのフォームからデータを送信するとparamsが返すハッシュの中身は入れ子になっている。
ハッシュの内容は、assign_attributesメソッドに渡すことでハッシュの内容がモデルの属性にセットされる。
フォームの記述
リソースベースのルーティングを設定したい時には、テンプレートでフォームを記述するのにform_forメソッドを使う。
新規作成フォーム
form_forメソッドを使う。
createアクションを呼び出すフォームとなる。
RailsはCSRF対策で、authenticity_tokenの文字列が合わないとGET以外のメソッドのときに
例外を発生させる。
authenticity_tokenはユーザーのセッションごとに用意する。
更新フォーム
editアクションの場合はvalue属性がpatchのやつがある。
Railsではpatchを判断したらupdateアクションを呼び出す。
また、formメソッドは引数のモデルオブジェクトを調べて保存されいなければcreate用のフォームを作り、
保存済ならupdate用のフォームを作る。
フォーム部品の記述
フォームビルダーは様々な機能を揃えている。
1行テキスト入力欄を作成するには、text_fieldメソッドを使う。
本記事は下記本の勉強記事です。初学者にとても良い本です。
※引数にモデルの属性名(テーブルのカラム名)を指定すればその属性を編集する入力欄になる。
<%= form_for @member do |form| %>
背番号 : <%= form.text_field :number %>
<% end %>
これで下記のinputタグが生成される。
背番号 : <input id="member_name" name = "member [number]" size="30" type="text" value="10" />
もう読むだけの勉強に変更することにした。。。
時間がかかる。
こっから頑張る。