tkymtk's blog

Ruby on Rails及びその周辺について調べたこと。Do whatever you want to do at your own pace.

Rails: form_tag まとめ

まとめ

form_tag まとめ

  • デフォルトでは現在のページにPOSTするフォームを生成
  • 文字エンコーディングとCSRF対策の為の<div>要素を生成
    • CSRF対策はGET以外のとき
  • 引数を2つとる。
    • 第1引数はリクエストを受けるアクションのパスを指定(文字列・ハッシュ)
    • 第2引数はメソッドや要素のクラス等のオプションを指定する。(ハッシュ)
  • ハッシュが2つの場合、中括弧を用いて明示する必要がある。
  • 検索フォームを作成するばあい、HTTPメソッドには"GET"を指定

例:

引数なし(現在のページが/home/indexの場合)
<%= form_tag do %>
  Form contents
<% end %>

↓ formタグのaction="/home/index"に注目

<form accept-charset="UTF-8" action="/home/index" method="post">
  <div style="margin:0;padding:0">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="f755bb0ed134b76c432144748a6d4b7a7ddf2b71" />
  </div>
  Form contents
</form>
引数の指定
文字列とハッシュ
<%= form_tag("/search", method: "get") do %>
# => '<form accept-charset="UTF-8" action="/search" method="get">'
ハッシュ2つ
# 失敗例(1つのハッシュとして認識されてしまう)
form_tag(controller: "people", action: "search", method: "get", class: "nifty_form")
# => '<form accept-charset="UTF-8" action="/people/search?method=get&class=nifty_form" method="post">'
# 成功例(ハッシュが2つのとき、最初または両方のハッシュに中括弧をつける)
form_tag({controller: "people", action: "search"}, method: "get", class: "nifty_form")
# => '<form accept-charset="UTF-8" action="/people/search" method="get" class="nifty_form">'

リンク

間違いがあれば、ご指摘下さると幸いです。