tkymtk's blog

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

Rails: フォーム要素を生成するためのヘルパー

フォーム要素を生成するためのヘルパー

Railsはチェックボックスやテキストフィールド、 ラジオボタンなどのフォーム要素を生成する一連のヘルパーを提供する。

  • "_tag"で名前が終わるヘルパーは、一つの<input>要素を生成する。
  • これらの第1引数はinputの名前
  • フォームがサブミットされたとき、フォームデータとともに名前も引き渡される
  • それによって、コントローラ内のparamsハッシュで、そのフィールドに入力された値を用いることができる。

例:

<%= text_field_tag(:query) %>
# => このフィールドの値は、コントローラ内ではparams[:query]で取得可能。

inputに名前をつけるとき、Railsは引数を配列やハッシュといった、 スカラーでない値でサブミットするために、ある規約を用いる。

例:

  • チェックボックス
<%= check_box_tag(:pet_dog) %>
<%= label_tag(:pet_dog, "I own a dog") %>
<%= check_box_tag(:pet_cat) %>
<%= label_tag(:pet_cat, "I own a cat") %>

<input id="pet_dog" name="pet_dog" type="checkbox" value="1" />
<label for="pet_dog">I own a dog</label>
<input id="pet_cat" name="pet_cat" type="checkbox" value="1" />
<label for="pet_cat">I own a cat</label>
<%= radio_button_tag(:age, "child") %>
<%= label_tag(:age_child, "I am younger than 21") %>
<%= radio_button_tag(:age, "adult") %>
<%= label_tag(:age_adult, "I'm over 21") %>

<input id="age_child" name="age" type="radio" value="child" />
<label for="age_child">I am younger than 21</label>
<input id="age_adult" name="age" type="radio" value="adult" />
<label for="age_adult">I'm over 21</label>
  • チェックボックス・ラジオボタンともに、第2引数はvalue
  • チェックボックスはデフォルトでvalue=1
  • ラジオボタンは同じnameを使うことで、一つしか選択出来ないようにできる。
  • チェックボックスとラジオボタンにはいつもlabelを用いる。
  • 第1引数は"_tag"では共通してinputの名前だが、第2引数はものによって異なる。 (button_tagなど第1引数がnameでない例外もある。)

詳しくは:
* ActionView::Helpers::FormTagHelper
* Form Helpers — Ruby on Rails Guides

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