2013-06-02 49 views
2

我有一個新的Rails 4應用程序,我試圖在前端使用Angular。Rails 4 + Angular嵌套屬性

我有以下幾點:

Board.rb

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

    accepts_nested_attributes_for :warehouses 
end 

Warehouse.rb

class Warehouse < ActiveRecord::Base 
    belongs_to :board 
end 

在我boards_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的PARAMS看起來像這樣:

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

我:

{"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直接回應我們看到了使用warehouses_attributes的建議,而不僅僅是board_params中的「倉庫」,但這似乎也沒有效果。

我想知道是否有人遇到類似的問題,如果是這樣..我可以調整我的請求或控制器接受和建立與他們各自的董事會的倉庫對象。也許我錯過了倉庫對象中的根節點?

非常感謝!

回答

0

忘掉這些參數。將此添加到您的主板型號中。問題解決了。

attr_accessible:warehouses_attributes

+0

在Rails 4中不起作用,因爲默認情況下內置了strong_params。 – Almaron

0

你需要的組合:

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