2013-06-02 4 views
2

У меня есть новое приложение Rails 4, в котором я пытаюсь использовать Angular в первую очередь на интерфейсе.Rails 4 + Угловые вложенные атрибуты

У меня есть следующие:

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 выглядеть так:

{"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"} 

I «Я видел предложения использовать 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

Я обычно добавить функцию в моем контроллере рельсов для нормализации параметров перед экономия:

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

Проверьте это для получения дополнительной справки: https://github.com/rails/rails/issues/17216

Смежные вопросы