3

私は Mongoid/Rails で 1 対 N の関係を持っています:

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!

次に、次の行に沿って、会社を更新するための JSON API コントローラーがあります。

# 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ログは次のように述べています:

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

「許可されていないパラメーター」という警告が表示されません。people フィールドを許可する考えられるすべての方法を試しましたが、まだ含まれていません。

params.require(:company).permit!

結果は同じです。私は何を間違っていますか?

4

1 に答える 1

0

割り当て時にnested_attributesを受け入れる必要があります

 class Company
  include Mongoid::Document

  field :name, type: String
  embeds_many :people, class_name: 'Person'
  accepts_nested_attributes_for :people
end
于 2014-10-10T07:44:38.683 に答える