【问题标题】:Rails 4 + Angular Nested AttributesRails 4 + Angular 嵌套属性
【发布时间】:2013-06-02 15:16:23
【问题描述】:

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

我有以下几点:

Board.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 而不仅仅是“仓库”的建议,但这似乎也不起作用。

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

非常感谢!

【问题讨论】:

    标签: ruby-on-rails-4 strong-parameters


    【解决方案1】:

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

    attr_accessible :warehouses_attributes

    【讨论】:

    • 在 Rails 4 中不起作用,因为 strong_params 是默认内置的。
    【解决方案2】:

    你需要混合:

    accepts_nested_attributes_for : warehouses 并将您的 warehouses json 属性/参数重命名为 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多