2014-11-27 2 views
0

Это действительно раздражает, им, вероятно, просто не хватает чего-то глупого. был на нем в течение 2 часов, может видеть, в чем проблема. Ошибка: ActiveModel :: ForbiddenAttributesError:ForbiddenAttributesError rspec create action

order.rb

has_many :item_lines 
accepts_nested_attributes_for :item_lines 

order_controller.rb

def create 
    if params[:v1_order][:item_lines_attributes].present? 
     puts "attributes: " 
     puts params[:v1_order][:item_lines_attributes] # {"quantity"=>"1", "net_price"=>"9.99"} 
     @v1_order = V1::Order.new(v1_order_params) 
     @v1_order.item_lines.build(params[:v1_order][:item_lines_attributes]) 
    else 
     @v1_order = V1::Order.new(v1_order_params) 
    end 
    end 

    def v1_order_params 
    params.require(:v1_order).permit(:state, :vat, :order_date, :user_id, 
    :item_lines_attributes => [:quantity, :net_price]) 
    end 

order_controller_spec.rb

expect { 
     post :create, 
     :v1_order => {vat: 20, user_id: 1,state: 0, 
     :item_lines_attributes => [quantity: 2, net_price: 3]}, 
     token: @user.api_key.token 
    }.to change(V1::Order, :count).by(1) 

     **below should also be valid, but no go ** 

     post :create, 
     v1_order: FactoryGirl.attributes_for(:v1_order, 
     item_lines_attributes: FactoryGirl.attributes_for(:v1_item_line)), 

Фабрики

factory :v1_order, :class => 'V1::Order' do 
    state 0 
    vat 20 
    user_id 1 
    end 
    factory :v1_item_line, :class => 'V1::ItemLine' do 
    quantity 1 
    net_price "9.99" 
    end 

продолжать получать это:

Failure/Error: post :create, 
ActiveModel::ForbiddenAttributesError: 
ActiveModel::ForbiddenAttributesError 

ответ

0

Проблема может быть связана с вашими заводами (v1_order и v1_item_line). Просто убедитесь, что v1_model завод содержит только :state, :vat, :order_date, :item_line_id, :user_id и v1_item_line содержит :quantity, :net_price.

+0

Я думаю, что это то, что они содержат: как вы можете видеть в контроллере, я использовал «puts params ...», чтобы проверить и распечатать правильные – Richardlonesteen

0

Определите def v1_order_params внутри частной функции.

Private Защиту v1_order_params .... конец Конец

+0

это личное, я просто не копировал эту часть. И я не думаю, что это изменило бы ситуацию – Richardlonesteen

0

В контроллере вы можете попытаться изменить:

@ v1_order.item_lines.build (PARAMS [: v1_order] [: item_lines_attributes])

To:

@ v1_order.item_lines.build (v1_item_lines_params)

Смежные вопросы