我有一个拥有许多产品的模型供应商。我想一次添加许多产品,而不显示属于vendor.product关系的现有产品。我只想显示新对象的表单。目前一切正常,但在添加页面上,我得到的所有对象都绑定到实例关系@ vendor.products。如果我不在表格中使用那种关系,我就不会得到任何字段。
以下是我的新产品操作:
'def new
@vendor = Vendor.find(params[:vendor_id])
5.times {@vendor.products.build}
end'
这是我的表格:
<%= form_for @vendor do |f| %>
<%= f.fields_for :products do |g| %>
<p>
<%= g.label :name %>
<%= g.text_field :name %>
<%= g.label :category %>
<%= g.select :category, options_for_select(['Parts', 'Labor', 'Extras', 'Shop']) %><br>
</p>
<% end %>
<p><%= f.submit "Submit" %></p>
<% end %>
产品型号:
class Product < ActiveRecord::Base
belongs_to :vendors
attr_accessible :name, :category, :vendor_id, :vendor_sku, :products
validates :name, :uniqueness => true
validates :category, :presence => true
validates :name, :presence =>true
end
重申一下,我只想展示空白的新建物品,而不是与@vendor关系相关的所有产品。我必须忽略一个表单结构才能完成这个工作,但我一直无法弄明白。谢谢你的期待。
答案 0 :(得分:1)
如果产品位于新记录中,则仅渲染嵌套字段。
<%= form_for @vendor do |f| %>
<%= f.fields_for :products do |g| %>
<% if g.object.new_record? %>
<p>
<%= g.label :name %>
<%= g.text_field :name %>
<%= g.label :category %>
<%= g.select :category, options_for_select(['Parts', 'Labor', 'Extras', 'Shop']) %><br>
</p>
<% end %>
<% end %>
<p><%= f.submit "Submit" %></p>
<% end %>