2

我有一个新的 Rails 4 应用程序,我试图主要在前端使用 Angular。

我有以下内容:

董事会.rb

class Board < ActiveRecord::Base
    belongs_to :organization
    has_many :warehouses

    accepts_nested_attributes_for :warehouses
end

仓库.rb

class Warehouse < ActiveRecord::Base
  belongs_to :board
end

在我调用的 create 方法中的 board_controller.rb 中

  @board = @organization.boards.build(board_params) # Organizations are a separate model that have many boards

在哪里

def board_params
  params.require(:board).permit(:date, :organization_id, :warehouses => [:name])
end

如果我在方法的开头放置一个 binding.pry,参数看起来像这样:

 {"board"=>
  {"date"=>"2013-06-02T15:12:16.554Z",
   "warehouses"=>
     [{"name"=>"Tidewater",
      "grades"=>nil,
      "new_grade"=>
       {"name"=>"New Grade",
        "total"=>0,
        "available"=>"2013-06-02T15:12:16.554Z"}},
     {"name"=>"MIT",
      "grades"=>nil,
      "new_grade"=>
       {"name"=>"New Grade",
        "total"=>0,
        "available"=>"2013-06-02T15:12:16.554Z"}}]},
 "action"=>"create",
 "controller"=>"boards",
 "organization_id"=>"1",
 "format"=>"json"}

但是,调用 board_params 会直接响应:

Unpermitted parameters: warehouses
=> {"date"=>"2013-06-02T15:12:16.554Z"}

我已经看到了在 board_params 中使用warehouses_attributes 而不仅仅是“仓库”的建议,但这似乎也不起作用。

我想知道是否有人遇到过类似的问题,如果是的话..我如何调整我的请求或控制器以接受并使用他们各自的董事会构建仓库对象。也许我在仓库对象中缺少一个根节点?

非常感谢!

4

2 回答 2

0

忘记参数。将此添加到您的 Board 模型中。问题解决了。

attr_accessible :warehouses_attributes

于 2013-11-23T04:07:39.053 回答
0

你需要混合:

accepts_nested_attributes_for : warehouses并将您的warehousesjson 属性/参数重命名为warehouses_attributes

我通常在我的 rails 控制器中添加一个函数来规范化参数,然后再保存:

def normalize_params(form_params) form_params[:warehouses_attributes] = form_params.delete :warehouses form_params end

检查此以获取更多参考:https ://github.com/rails/rails/issues/17216

于 2017-04-18T01:57:27.943 回答