为什么“accepts_nested_attributes_for”不起作用?

时间:2016-07-28 06:37:23

标签: ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2 rubygems

我有以下模特

顺序

    class Order < ApplicationRecord
         has_many  :items
         accepts_nested_attributes_for :items
    end

和项目

class Item < ApplicationRecord


belongs_to  :order

end

我跟随Json解析订单包含多个项目的位置

    {
  "location": "takeAway",
  "status": "preparing",
  "items": [
    {
        "id":2,
      "name": "coffee",
      "quantity": 1,
      "milk": "whole",
      "size": "small"
    }
  ]
}

我有以下代码我的控制器。

 params.require(:order).permit(:location, :status, items_attributes:  [:id, :name, :quantity, :milk, :size])

为什么我无法使用商品记录保存订单记录?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我想问题是您在params中收到了密钥items,但您允许items_attributes。您应该确保以params而不是items_attributes收到items。只有这样,它才会自动为items条记录分配属性。

所以,你的最终params hash必须如下所示:

    {
      "location": "takeAway",
      "status": "preparing",
      "items_attributes": [
        {
          "id":2,
          "name": "coffee",
          "quantity": 1,
          "milk": "whole",
          "size": "small"
        }
      ]
    }

如果您希望将items键保留在参数中,则必须自己在控制器中构建Item个对象。