参考:Railsガイド 感謝です。
1 基本的なフォームを作成する
名前 |
---|
form_tag |
<%= form_tag do %>
Form contents
<% end %>
form_tagは、上のように引数なしで呼び出されると
タグを生成します。このフォームを指定のページに送信するときにはHTTPのPOSTメソッドが使われます。たとえば現在のページが/home/indexの場合、以下のようなHTMLが生成されます (読みやすくするため改行を追加してあります)。<form accept-charset="UTF-8" action="/home/index" method="post">
<div style="margin:0;padding:0">
<input name="utf8" type="hidden" value="✓" />
<input name="authenticity_token" type="hidden" value="f755bb0ed134b76c432144748a6d4b7a7ddf2b71" />
</div>
Form contents
</form>
1.divタグは省略不可
上のフォームにはivタグに囲まれた中に、2つの隠しinput要素が置かれています。このdivタグがないとフォームを正常に送信できないため、**divタグは省略できません。**最初の隠しinput要素であるutf8は、フォームで指定の文字エンコーディングをブラウザに強制します。これはアクションがGETとPOSTのどちらであってもすべてのフォームで生成。
2.authenticity_tokenはGET以外のすべてのフォームで生成
2番目の隠しinput要素であるauthenticity_token要素は クロスサイトリクエストフォージェリへの保護のためのセキュリティ機能。この要素はGET以外のすべてのフォームで生成されます(セキュリティ機能が有効になっている場合)。
一般的な検索フォーム
検索フォーム | 働き |
---|---|
form_tag | GETメソッドを送信するためのフォーム要素 |
label_tag | 入力するものを示すラベル |
text_field_tag | テキスト入力要素 |
submit_tag | 「送信」ボタン要素 |
<%= form_tag("/search", method: "get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
上のコードから以下のHTMLが生成されます。
<form accept-charset="UTF-8" action="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
<label for="q">Search for:</label>
<input id="q" name="q" type="text" />
<input name="commit" type="submit" value="Search" />
</form>
どのフォームinputでも、id属性はinputのnameから生成。(上の例では「q」)。これらのidは、cssでのスタイル追加やJavaScriptによるフォーム制御で使うのに便利。
HTMLのすべてのフォームコントロールには、text_field_tagやsubmit_tagと同様の便利なヘルパーが用意されています。
フォームを検索に使う場合は必ずGETメソッドを利用。こうすることで検索クエリがURLの一部となり、ユーザーが検索結果をブックマークしておけば、後でブックマークから同じ検索を実行できます。Railsでは基本的に、常にアクションに対応する適切なHTTPverbを選びます。