Rails – 基礎的なフォーム

概要

フォームとのパラメーターのやりとりのみを確認する。

  • 既存のビューにフォーム関係のタグを書き、新たなアクションに送信する
  • 既存のコントローラーにそのアクションを追加し、フォームからのデータをパラメータとして受け取る
  • 受け取ったパラメーターをフォームを書いた既存のビューに渡してレンダリング
  • フォーム関連のタグをヘルパーに置き換える

元になる枠組み

  • プロジェクト:demo_app
  • コントローラー:demo_contents
  • アクション:top_page
  • ビュー:top_page.html.erb

STEP-1~form_tag

ビューファイルへのフォームの記述

top_page.html.erbに以下の内容を記述。

上記のform_tagは、submitされた内容を指定したアクションにpostするformタグを生成する。

ただし直接formタグを書くと”invalid authenticity token”エラーになる。

コントローラーにアクション追加

フォームからPOSTで送られる内容を受けるアクションを、コントローラにメソッドとして追加する。

ルーティングの追加

config/routes.rbファイルに、POSTに対するアクションメソッドへのルーティングを追加する。

アクションの確認

ルートページにフォームが表示され、テキストボックスにメモを入力して送信ボタンを押すと、Railsサーバーにデータが送られている様子が表示される。

STEP-2~params

params変数の確認

  • フォームからsubmitされたときのフォーム要素の値は、params変数に格納される
  • params変数はハッシュで、フォーム要素のname属性で指定した内容がキーになる

確認のため、demo_contentsコントローラーのpost_memoアクションに1行追加する。

ここでテキストボックスにメモを入力して送信すると、Railsサーバーにその内容が表示される。

params変数のHTMLへの反映

上記のpost_memoアクションの内容を以下の様に変更する。

  • viewから参照可能な@memoにフォームから受け取ったparams[:memo]の内容をセット
  • トップページへのレンダリングとreturn

@変数はクラスのインスタンス変数で、これをアクションとビューで共有できる。

またビューファイルtop_page.html.erbに以下の様に追記する。コントローラーでセットされた@memoの内容をHTMLで表示させている。

この結果、送信ボタンを押すと入力したメモの内容がtop_pageに表示されるようになる。

STEP-3~フォームヘルパー

フォーム内の要素を、以下の様にフォームヘルパー関数に書き換える。

さらにformヘルパーはhiddenタイプのinputタグを追加するが、これはCSRF対策のため

上記のlabel_tagtext_field_tagsubmit_tagはそれぞれ対応するタグに変換される~フォームヘルパー(旧)

form_tagヘルパーのまとめ

フォーム全体

  • form_tag…endヘルパーでフォーム全体を囲む
  • form_tagではポスト先のURLを指定する
  • ポスト先のURLはroutes.rbでポスト先アクションにルーティングしておく

フォーム内のヘルパー

  • label、inputタグに置き換えられるヘルパーの多くは、第1引数にname属性に対応する引数をとる
  • この名前引数には、一般にシンボルがあてられる

受信側での扱い

  • 受信側ではparamsというハッシュにフォームからの受信結果が入れられる
  • 受信のためにルーティングされたアクション内で、このparamsを参照する
  • paramsのキーに、フォームでname属性に指定したシンボルを使って値を読み出す

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です