1

次の関連付けを持つ Vendor モデル、Product モデル、および VendorProduct モデルがあります。

class Vendor < ActiveRecord::Base
  has_many :vendor_products
  has_many :products, through: :vendor_products
end

class Product < ActiveRecord::Base
  has_many :vendor_products
  has_many :vendors, through: :vendor_products
end

class VendorProduct < ActiveRecord::Base
  belongs_to :vendor
  belongs_to :product
end

ベンダー _form.html.erb ページで製品のドロップダウン コレクション選択オプションを表示するために、nested_form gem を使用しています。

<%= nested_form_for(@vendor) do |f| %>
  <% if @vendor.errors.any? %>
      :
      :
      :
    <%= f.fields_for :vendor_products do |vproducts| %>
      <%=  render 'product_fields', :f => vproducts %> 
      <%= vproducts.link_to_remove "Remove this Product"  %>
    <% end %> &nbsp
    <%= f.link_to_add "Add product", :vendor_products %>

    <div class="actions">
      <%= f.submit %>
    </div>
<% end %>  

私の _product_fields.html.erb は

<div class= "vendor_products">
  <div class="field">
    <%= f.label :product_id %><br>
    <%= f.select :product_id, 
    options_from_collection_for_select(Product.all, "id", 
       "product_name"), prompt: "Select something", %>
      &nbsp
    <%= f.label :copies %>
    <%= f.number_field :copies %>
  </div>
</div>

私の Vendor モデルには、 vendor_products の次の Accepted_nested_attributes があります

class Vendor < ActiveRecord::Base
  accepts_nested_attributes_for :vendor_products, :allow_destroy => 
   true, :reject_if => :all_blank
end

私のベンダーコントローラーはこちら

def new 
  @vendor = Vendor.new
  @vendor.vendor_products.build
end

def edit
  @vendor.vendor_products.build
end

ベンダーと、正しく入力されたVendorProductものを含みます。すべて問題なく動作します。唯一の問題は、ベンダー編集ページで、製品選択オプションに選択した値が表示されず、ドロップダウン リストの最初のオプションが表示されることです。ただし、行の値を確認すると、正しい製品がテーブルに追加されています。編集ページのドロップダウンのみに、実際に選択された値が表示されません。Product_idVendor_id

どうすればこれを修正できますか? 助けてください。

4

2 に答える 2

5

これは問題でnested_attributesあり、dropdown

フォームオブジェクト"f"を利用して、値として:product_id使用f.object.product_idして渡すことができますselected

<%= f.select :product_id,
              options_from_collection_for_select(Product.all, "id", "product_name", f.object.product_id), 
              prompt: "Select something" %>

参照options_from_collection_for_select

于 2016-09-14T07:28:00.387 に答える