2014-10-10 3 views
2

у меня есть отношения 1-N в Mongoid/Rails:Mongoid встроенных документов и Rails сильных параметров не работает

class Company 
    include Mongoid::Document 

    field :name, type: String 
    embeds_many :people, class_name: 'Person' 
end 

class Person 
    include Mongoid::Document 

    field :first_name, type: String 
    embedded_in :company, class_name: 'Company', inverse_of: 'people' 
end 

Теперь я могу успешно создать компанию следующим образом в консоли; например:

> c = Company.new(name: 'GLG', :people => [{first_name: 'Jake'}]) # OK! 
> c.people               # OK! 

Тогда у меня есть контроллер API JSON, чтобы обновить компанию, вдоль линий:

# PUT /api/companies/:id 
def update 
    if Company.update(company_params) 
    # ... render JSON 
    else 
    # ... render error 
    end 
end 

private 

def company_params 
    params.require(:company).permit(:name, :people => [:first_name]) 
end 

Теперь, когда запрос PUT поступает из внешнего интерфейса, то company_params всегда отсутствует атрибут: people. Rails log говорит:

Parameters: {"id"=>"5436fbc64a616b5240050000", "name"=>"GLG", "people"=>[{"first_name"=>"Jake"}], "company"=>{"name"=>"GLG"}} 

Я не получаю предупреждение «Непереведенные параметры». Я пробовал каждый возможный способ разрешить людям поле, и он по-прежнему не включается.

params.require(:company).permit! 

Результаты в том же самом. Что я делаю не так?

ответ

0

Вы должны принять nested_attributes о присвоении

class Company 
    include Mongoid::Document 

    field :name, type: String 
    embeds_many :people, class_name: 'Person' 
    accepts_nested_attributes_for :people 
end 
+0

Нет эффекта. У параметров уже есть эта проблема, когда они нажимают на метод обновления. – Jake

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