form_for 助手中的@product 附带更多功能。
:product 只影响输入字段的 id 和 name。例如,您在表单中提交了一个文本:
<%= 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 和文本字段名称确定。
如果您使用@product,则不需要:url,因为网址将根据@product的状态确定:
- 如果
@product 是新记录,则url 将发布到create
- 否则,该网址将发布到
update
并且输入字段的 id 和 name 受@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 和输入字段的值。