Railsのform_tagで生成されるHTML
Railsのform_tagメソッドがどのようなHTMLを生成するのか整理。
まず
form_tag
一番シンプルな形
<%= form_tag do %> formの中身 <% end %>
↓
<form accept-charset="UTF-8" action="今の画面のURL" method="post"> <div style="margin:0;padding:0;display:inline"> <input name="utf8" type="hidden" value="✓" /> <input name="authenticity_token" type="hidden" value="トークン" /> </div> formの中身 </form>
すっぴんでも、デフォルトで色々ついてくる
actionを指定
<%= form_tag("/hoge") do %> formの中身 <% end %>
↓
<form accept-charset="UTF-8" action="/hoge" method="post"> <div style="margin:0;padding:0;display:inline"> <input name="utf8" type="hidden" value="✓" /> <input name="authenticity_token" type="hidden" value="トークン" /> </div> formの中身 </form>
mehodを指定
<%= form_tag("/hoge", method: "get") do %> formの中身 <% end %>
↓
<form accept-charset="UTF-8" action="/hoge" method="get"> <div style="margin:0;padding:0;display:inline"> <input name="utf8" type="hidden" value="✓" /> </div> formの中身 </form>
- GETにすると、input name=authenticity_token...は付加されない
id,name,classを追加
<%= form_tag("/hoge", method: "get", id: "hoge_id", name: "hoge_name", class: "hoge_class") do %> formの中身 <% end %>
↓
<form accept-charset="UTF-8" action="/hoge" class="hoge_class" id="hoge_id" method="get" name="hoge_name"> <div style="margin:0;padding:0;display:inline"> <input name="utf8" type="hidden" value="✓" /> </div> formの中身 </form>
引数2つというのがポイント
<%= form_tag("/hoge", method: "get", id: "hoge_id", name: "hoge_name", class: "hoge_class") do %> formの中身 <% end %>
⇅同じ
<%= form_tag( "/hoge", { method: "get", id: "hoge_id", name: "hoge_name", class: "hoge_class" } ) do %> formの中身 <% end %>
第1引数にもハッシュが使える
- form_tagの第1引数(actionの値になる)は文字列でなく、link_toヘルパーと同じくルーティングのハッシュを入れることができる
- 例えばusersコントローラにsearchアクションがルーティング設定されているとしたら、以下のように書ける
<%= form_tag( { controller: "users", action: "search", id: 1 }, { method: "get", id: "hoge_id", name: "hoge_name", class: "hoge_class" } ) do %> formの中身 <% end %>
↓
<form accept-charset="UTF-8" action="/users/1/search" class="hoge_class" id="hoge_id" method="get" name="hoge_name"> <div style="margin:0;padding:0;display:inline"> <input name="utf8" type="hidden" value="✓" /> </div> formの中身 </form>
以上
form_forについてはまた今度調べる
参考
公式のドキュメントが一番正確
http://guides.rubyonrails.org/form_helpers.html
htmlのformについてしっかり理解したいときには
http://www.kanzaki.com/docs/html/htminfo31.html