2016-05-26 20 views
0

フロントエンドからサーバーにJSONオブジェクトを渡して新しいStockOrderを作成しようとしています。 StockOrdersのための定義された強力なパラメータ次のようになります。StockOrder & StockOrderLineItem:あなたは私は2つのモデルを持っていることがわかります。この中レールで新しいレコードを作成できません

private 
    def stock_order_params 
    params.require(:stock_order).permit([StockOrder.strong_params, :purchaser_id, :carriage_terms, :carriage_cost, :contact_id, :user_id, :currency, :default_vat_rate, :discount_cost, :dispatched_status, :due_date, :internal_notes, :invoice_address_id, :invoice_date, :payment_terms, :po_date, :vat_rate, :purchase_order_number, {stock_order_line_items_attributes: [StockOrderLineItem.strong_params, :_destroy, :id, :part_id, :description, :quantity, :unit_cost, :vat_rate, :quantity_to_dispatch, :sort_index] + StockOrderLineItem.additional_params}, :purchaser_notes, :delivery_address] + StockOrder.additional_params) 
    end 

。ここで

は、私は私のフロントエンドから送信てるものです:

{ 
"stock_order": 
    { 
    "stock_order_line_items_attributes": 
     { 
     "part_id":2309,"unit_cost":15, 
     "quantity_to_dispatch":5 
     }, 
    "contact_id":10, 
    "purchaser_id":10 
    } 
} 

そして最後に、ここでは、私は私の新しいStockOrderを作成しようとしている方法です:

@stock_order = StockOrder.new(stock_order_params) 

しかし、サーバーが応答します

Rails controller error

しかし、私はしました:このエラーで両方のモデルを見て、私が渡しているパラメータのうち、どれも文字列ではありません。

# == Schema Information 
# 
# Table name: stock_orders 
# 
# id      :integer   not null, primary key 
# ref_no     :integer 
# purchase_order_number  :string 
# contact_id    :integer 
# purchase_order_date  :date 
# carriage_terms   :text 
# payment_terms    :text 
# due_date     :date 
# purchaser_id    :integer 

そしてStockOrderItemList

# == Schema Information 
# 
# Table name: stock_order_line_items 
# 
# id      :integer   not null, primary key 
# stock_order_id   :integer 
# part_id    :integer 
# quantity    :decimal(,) 
# vat_rate    :float 
# unit_cost_cents  :integer 
# net_cost_cents   :integer 
# total_cost_cents  :integer 
# vat_cost_cents   :integer 
# local_unit_cost_cents :integer 
# local_net_cost_cents :integer 
# local_total_cost_cents :integer 
# local_vat_cost_cents :integer 
# quantity_dispatched :decimal(,) 
# created_at    :datetime   not null 
# updated_at    :datetime   not null 
# description   :text 
# 

EDIT

のためにこれが何をputs.stock_order_params.classプリントアウト

Parameters: { 
    "stock_order"=>{ 
    "stock_order_line_items_attributes"=>{ 
     "part_id"=>2309, 
     "unit_cost"=>15, 
     "quantity_to_dispatch"=>5 
    }, 
    "contact_id"=>10, 
    "purchaser_id"=>10} 
} 

次のとおりです。ここでは、テーブルのスキーマのスナップショットですEDIT 2

19:34:59 web.1 | App 31944 stdout: ----------------------HERE!------------------------- 
19:34:59 web.1 | App 31944 stdout: MagicField Load (0.7ms) SELECT "magic_fields".* FROM "magic_fields" WHERE "magic_fields"."model_owner" = $1 [["model_owner", "StockOrder"]] 
19:34:59 web.1 | App 31944 stdout: MagicField Load (0.3ms) SELECT "magic_fields".* FROM "magic_fields" WHERE "magic_fields"."model_owner" = $1 [["model_owner", "StockOrderLineItem"]] 
19:34:59 web.1 | App 31944 stdout: ActionController::Parameters 
19:34:59 web.1 | App 31944 stdout: ----------------------THERE!------------------------- 
+0

'stock_order_params.class'を置くか、' stock_order_paramsを置くやろう。 @stock_order = 'StockOrder.new(stock_order_params)'の前にinspectを実行すると、これはあなたが扱っているものを明確にします。 – imechemi

+0

@imechemi done - 私の編集を参照 – Katana24

+0

'stock_order_params.class'を印刷しようとしている場合は不可能です。 JSON、Hash、Stringのいずれかのデータタイプを出力する必要があります。強力なパラメータの内容は印刷しないでください。 – imechemi

答えて

1

は私がStockOrderStockOrderItemsとの関係が1対多の関係であると仮定します。

this guide to nested attributesを参照してください。

コントローラに、​​というハッシュの配列を1つのハッシュ(One-to-One relationships)の代わりに送信する必要があります。

言うことです:

{ 
"stock_order": { 
    "stock_order_line_items_attributes": [ 
     { 
     "part_id":2309, 
     "unit_cost":15, 
     "quantity_to_dispatch":5 
     } 
    ], 
    "contact_id":10, 
    "purchaser_id":10 
    } 
} 
1

has_many関連があると仮定すると、あなたのパラメータは次のようにする必要があります:

Parameters: { 
    "stock_order"=>{ 
    "stock_order_line_items_attributes"=>[ 
     { 
     "part_id"=>2309, 
     "unit_cost"=>15, 
     "quantity_to_dispatch"=>5 
     } 
    ], 
    "contact_id"=>10, 
    "purchaser_id"=>10 
    } 
} 
関連する問題