Rails嵌套资源 - 许多对象,相同模型,没有现有对象的一个​​表单

时间:2014-06-05 22:51:14

标签: ruby-on-rails activerecord resources nested-forms nested-attributes

我有一个拥有许多产品的模型供应商。我想一次添加许多产品,而不显示属于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关系相关的所有产品。我必须忽略一个表单结构才能完成这个工作,但我一直无法弄明白。谢谢你的期待。

1 个答案:

答案 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 %>