@product
в помощнике form_for
поставляется с большим количеством функций.
:product
влияет только на идентификатор и имя поля ввода. Например, у вас есть текст в форме:
<%= 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
не требуется, поскольку URL-адрес будет определен в соответствии со статусом @product
:
- если
@product
является новой записью, URL будет публиковаться в create
- в противном случае, URL будет публиковаться в
update
На идентификатор и имя входного файла влияет имя класса @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
контролирует имя и идентификатор входного файла, а @product
контролирует URL и значение поля ввода.