- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

Ruby/Ruby on Rails

はじめに Edit

Ruby on Railsでどんな時にform_forやform_tagを使い分けるの?というのというお話。

環境は、Rails 2.3.2
※筆者はまだ、Railsに慣れていません。注意して読んでください。ぜひ突っ込みを

使い分け雑感 Edit

form_tag はとりあえず<form>タグでPOSTとかしたい時に使う。
form_tag の類はヘルパー(ActionView::Helpers::FormTagHelper)

<% form_tag :action => "unko", :id => 1234 do %>
  <%= label_tag 'author' %>:
  <%= text_field_tag 'author' %><br />

  <%= label_tag 'accept' %>:
  <%= check_box_tag 'accept' %><br />

  <%= submit_tag "post!!" %>
<% end %>

で、form_tagでモデルなんかにそのまま結果を入れたい時(CRUDとか、オブジェクトに関連付けたいとき?)は、text_field_tag などではなく、text_field の方を使う。
(って、こういう解釈であってますか?)

<% form_tag :action => "unko", :id => 1234 do %>
  
  <%= label :post, :author %>:
  <%= text_field :post, :author %> 
  <%= error_messages_on :post, :author %><br />

  <%= label :post, :accept %>:
  <%= check_box :post, :accept %>
  <%= error_messages_on :post, :accept %><br />

  <%= submit_tag "post!!" %>
<% end %>

また、最初のtext_fieldには、@post.authorの内容がデフォルト値(value=)として使われます。同様に、check_boxの値には@post.acceptが入ります。
(この辺はRailsのAPIドキュメントのtext_fieldやcheck_boxのHTMLの出力結果を見てみればわかります)

ここで1つ思うのは、:postという記述が冗長ですよね。
それを解決するのが form_for です。(でよいのか?)

form_forは類としてはActionView::Helpers::FormBuilderになる。

<% form_for @post, :url => {:action => "unko", :id => 1234} do |f|%>  
  <%= f.error_messages %><br />

  <%= f.label :author %>:
  <%= f.text_field :author %><br />

  <%= f.label :accept %>:
  <%= f.check_box :accept %><br />

  <%= f.submit "post!!" %>
<% end %>

form_forの詳細はRailsのドキュメントの"form_for"のページある程度書いてあります。

注意点 Edit

radio_button_tagとradio_buttonのcheck時の違い Edit

ラジオボタンを表示する時に使う radio_button_tag はデフォルトのチェック状態を指定するには、引数の4番目に boolean を指定します。

例:

<%= radio_button_tag 'receive_updates', 'no', true %>

しかし、radio_button の方は、3番目の引数以降に、:checked => true でデフォルトのチェック状態指定します。

例:

<%= radio_button("user", "receive_newsletter", "yes", :checked => true) %>

書き換えようとしてハマるので注意。

参考リンク Edit


No comment. Comments/Ruby/Ruby on Rails/form_forやform_tagなどの使い分け?

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-07-21 Tue 18:53:31 JST (3795d)