3

products_controller.rb

def new
  @product = Product.new
  @product.build_discount
end

产品.rb

has_many :discounts, :dependent => :destroy
accepts_nested_attributes_for :discounts
attr_accessible :discounts_attributes

折扣.rb

belongs_to :product

_edit_product.html.erb

<%= form_for(product, :html => { :multipart => true  }, :remote => true) do |f| %>
    // STUFF
    <%= f.fields_for :discounts do |discount_form| %>
       //does not show up
    <% end %>
<% end %>

块中的内容fields_for不显示。但是,如果我更改has_many :discounts为,则会has_many :discount显示表单(尝试提交时出现批量分配错误)。

fields_for关于为什么表单没有在块中呈现以及为什么在我更改复数形式时它会呈现的任何想法?

4

3 回答 3

7

您想要折还是折?

@product.build_discounthas_one关联中使用,但您的其余代码用于has_many

如果您想要很多折扣,请将其更改为@product.discounts.build

否则,如果您只想要一个折扣,请更改以下内容:

f.fields_for :discount do |discount_form|accepts_nested_attributes_for :discount为单数。

@products.discounts.build不起作用,因为您无法从对象集合中获取关联。例如:

@products = Product.all
@discount = @products.discounts.build
# This won't work! You'll get an error

@product = Product.find(params[:id])
@discount = @product.discounts.build
# This will work, since you're running it on a single instance of Product
于 2013-04-16T01:15:16.660 回答
0

你如何将局部变量传递product给你的局部变量_edit_product.html.erb?我猜你有一个new.html.erb视图来渲染你的部分?

于 2013-04-16T01:14:51.030 回答
0

使用@mind_blank 的答案,我写了这个解决方案:

@products = current_user.products.each {|product| product.discounts.build}

表格出现在这一行之后。

于 2013-04-16T15:32:48.353 回答