3

products_controller.rb

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

product.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

多くの割引が必要ですか、それとも1の割引が必要ですか?

@product.build_discount関連付けで使用されhas_oneますが、コードの残りの部分はhas_many

多くの割引が必要な場合は、次のように変更します@product.discounts.build

そうではなく、 1 つの割引のみが必要な場合は、次のように変更します。

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 に答える