0

Rails 4でデバイス販売者に製品を含む注文を作成したいのですが、gem「cocoon」を使用しています

class Seller < ActiveRecord::Base
has_many :orders

class Order < ActiveRecord::Base
belongs_to :seller
has_many :products
accepts_nested_attributes_for :products, allow_destroy: true

class Product < ActiveRecord::Base
belongs_to :order

new.html で作成したいのですが、売り手はサインインする必要はありません。URL からできることを願っています。

 new.html
<%- model_class = Order -%>   
<%= simple_form_for @order, :html => { :class => 'form-horizontal' } do |f| %> 
<%= f.simple_fields_for :products do |product| %>
<%= render 'product_fields', :f => product %>
<% end %>
<%= link_to_add_association 'add product', f, :products %>
<%= f.button :submit, :class => 'btn-primary' %>
<% end %>

in product_fields

<%= f.input :name %>
<%= f.input :description %>
<%= link_to_remove_association 'remove product', f %>

def new
 current_seller = Seller.find{|person|person.store==params[:store]}
 @order = current_seller.orders.new
end

def create
@seller = current_seller
@order = @seller.orders.new(order_create_params)

respond_to do |format|
  if @order.save
    format.html { redirect_to @order, notice: 'Order was successfully created.' }
    format.json { render action: 'show', status: :created, location: @order }
  else
    format.html { render action: 'new' }
    format.json { render json: @order.errors, status: :unprocessable_entity }
  end
end

/orders/new?store=test03 のように URL を終了します

def order_create_params
  params.require(:order).permit(products_attributes: [:id, :name, :description, :_destroy]).merge(:seller_id => @seller.id)
end

多くの方法で構築しようとしましたが、「製品の削除」が機能しませんでした。Order.new を使用して最初の 1 つの製品のみを作成すると、順序どおりに保存でき (最初に表示されます)、seller_id を取得できず、現在は取得できません。作成すると、nil:NilClass に対して未定義のメソッド「orders」が発生します

作成アクションを定義して注文を作成し、販売者をリンクし、製品を削除して機能させるにはどうすればよいですか

4

1 に答える 1

5

削除を機能させるには、パーシャルを with クラスで囲む必要product_fieldsがあります。divnested-fields

于 2013-12-24T02:11:02.047 に答える