Вы можете думать о @product в новом действии как о несохраненном объекте, который просто заполняет поля формы, отображаемые в представлении.Это делает new.html.erb почти таким же, как edit.html.erb, и позволяет им совместно использовать один частичный _form.html.erb.
Когда этот частичный элемент используется в новом действии, поля заполняются свежим, пустым и несохраненным объектом @product.Это Product.new, который появляется в новом действии.Когда частичное используется в действии редактирования, у вас есть объект @product, который предположительно имеет значения для всех его атрибутов.Теперь предположим, что вы не использовали @product в новом действии.Форма, используемая в new.html.erb, должна отличаться от формы, используемой при редактировании.Удачи в их сохранении, если вы когда-нибудь добавите новое поле в модель.
Другое преимущество этого подхода заключается в том, что вы можете предварительно заполнить атрибуты нового @product до того, как они будут отображены в представлении.Предположим, вы хотите использовать имя «новый продукт» в качестве имени по умолчанию для каждого продукта.Вы можете сделать это в новом действии следующим образом:
def new
@product = Product.new(:name => 'new product')
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @product }
end
end