は
<%= form_for(:product, :url => {:action => 'update', :id => @product.id})) do |f| %>
...
<% end %>
と
<%= form_for(@product, :url => {:action => 'update', :id => @product.id})) do |f| %>
...
<% end %>
まったく同じ ?
は
<%= form_for(:product, :url => {:action => 'update', :id => @product.id})) do |f| %>
...
<% end %>
と
<%= form_for(@product, :url => {:action => 'update', :id => @product.id})) do |f| %>
...
<% end %>
まったく同じ ?
ヘルパーには@product
、form_for
より多くの機能が付属しています。
:product
入力フィールドのIDと名前にのみ影響します。たとえば、次の形式でテキストが提出されているとします。
<%= form_for :product, :url => {...} do |f| %>
<%= f.text_field :price %>
<% end %>
生成されたhtmlは次のようになります。
<input type="text" id="product_price" name="product[price]" />
id
およびのname
値は、:product.to_s
およびテキストフィールド名によって決定されます。
一方、を使用する場合、URLはのステータスに従って決定されるため、は必要ありません@product
。:url
@product
@product
、URLはに投稿されますcreate
update
また、入力フィールドのIDと名前は@product
のクラス名の影響を受けるため、単一のテーブル継承を使用する場合は重要です。入力フィールドの値には、@product
の属性値が自動的に割り当てられます。したがって、を使用する@product
と、html出力は次のようになります。
<input type="text" id="product_price" name="product[price]" value="some value" />
のクラス@product
名がItem
、であるとすると、出力は次のように変更されます。
<input type="text" id="item_price" name="item[price]" value="some value" />
:product
そしてもちろん、との両方を使用できます@product
:
<%= form_for :product, @product do |f| %>
コントロールは入力ファイルの:product
名前とIDを制御し、@product
コントロールはURLと入力フィールドの値を制御します。
似ていますが、同じではありません。@product を使用すると、モデル インスタンスからフォーム フィールドに値を自動的に入力できるという利点があります。
たとえば、コントローラーのアクション :new で @product を次のように割り当てる場合:
@product = Product.new
そうすれば、おそらく生成されるフォームに違いはありません。ただし、これを :create アクションで次のようにフォローアップすると、次のようになります。
@product = Product.new(params[:product])
if @product.save
...
else
render :action => :new
end
@product インスタンスを保存できない場合は、:new と同じフォームがレンダリングされますが、今回はすべてのフィールドに投稿された値が入力されています。:product を使用した場合、それは不可能でした
form_for
それはあなたがそこにいるかなり長いです。あなたの質問への短い答え:@product
これは、多くのオブジェクトを持つことができるリソースに対してどのアクションを実行するかを決定するのに役立ちます。これは、このように聞こえます。:product
一方、常に同じアクションに進みupdate
ます. これは、単一のリソースに最適です。リソースの優れた説明は、Routing Guideにあります。入門ガイドでも説明されています。
あなたの2番目form_for
はこれに短縮できます:
<%= form_for @product do |f| %>
...
<% end %>
すべてはルーティングと入門ガイドで説明されています。
また、あなたのプロフィールを見ると、あなたはメルボルン出身です。Ruby on Rails オセアニアのGoogle グループには、全国のミートアップがリストされています。メルボルンでは毎月 1 回開催され、志を同じくする人々に会うために参加したいと思うかもしれません。