Railsでのフォーム生成タグform_forとform_tag

railsにはフォーム生成時に使い勝手がいいviewヘルパータグであるform_forとform_tagがあります。

form_for

基本、特定のモデルを編集・追加するためのフォームです。
scaffoldを使って実行時にもこの形で生成されます。

<% form_for(レコード名) do |f| %>
…
<% end %>

レコード名はモデルで設定した名前を使います。

form_for内で使うメソッドに
f.label→labeのlabelタグを表示
f.text_field→textのinputタグを表示
f.date_select→モデルで設定したフィールドをselectタグで選べるようにして表示
f.check_box→checkboxのinputタグを表示
f.submit→submitのinputタグを表示

などのhtmlのformを知っていたら推測できるようなメソッドが用意されています。

例えば

<% f.text_field:name %>

html表示で

<input id="レコード名_name" name="レコード名[name]" type="text"
size="モデルで設定したsize" type="text">

が生成されます。

form_tag

モデルが存在しない凡庸的なフォームの生成に利用します。

例えば、検索機能を作るとすれば
View

<% form_tag "/コントローラー名/find" do %>
<%= text_field_tag :search_string %>
<%= submit_tag "検索" %>
<% end %>
<% @テーブル名.each do |レコード名| %>
<table><tr>
<td><%= レコード名.キー %></td>
<td><%= レコード名.キー %></td>
<td><%= レコード名.キー %></td>
<td><%= レコード名.キー %></td>
</tr></table>
<% end %>

html表示

<form accept-charset="UTF-8" action="/コントローラー名/find" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="&#x2713;" />
<input name="authenticity_token" type="hidden" 
value="cA3fWU4GDNeK7dXv3WIOq7H5hoQ1/lLJmmjfCMJ87ZI=" /></div>
<input id="search_string" name="search_string" type="text" /> 
<input name="commit" type="submit" value="検索" /> 
</form>
<table> <tr> 
<td>値</td> 
<td>値</td> 
<td>値</td> 
<td>値</td> 
</tr></table>

Contolloer

def find
	@テーブル名 = レコード名.all
	(:conditions=>["キー= ? OR キー = ?", 
	params[:search_string], params[:search_string]])
end

:conditionsを使うことで検索条件を設定することができます。
コントローラーでActive Recordを使ってモデルから検索することでハッシュオブジェクトを取り出し表示できます。


コメントする