关于 json:Rails 中的嵌套强参数 – AssociationTypeMismatch MYMODEL 预期,得到 ActionController::Parameters()

Nested strong parameters in rails - AssociationTypeMismatch MYMODEL expected, got ActionController::Parameters()

我正在渲染一个模型,它是 JSON 格式的子书,如下所示:

1
{"id":2,"complete":false,"private":false,"books" [{"id":2,"name":"Some Book"},.....

然后我通过将相同的 JSON 传回我的控制器来更新此模型,我收到以下错误:

ActiveRecord::AssociationTypeMismatch (Book (#2245089560) 预期,得到 ActionController::Parameters(#2153445460))

在我的控制器中,我使用以下内容进行更新:

1
2
3
4
5
6
7
@project.update_attributes!(project_params)

private

def project_params
    params.permit(:id, { books: [:id] } )
end

无论我在 permit 中将哪些属性列入白名单,我似乎都无法保存子模型。

我是否遗漏了一些明显的东西?

更新 - 另一个例子:

控制器:

1
2
3
4
5
6
def create
    @model = Model.new(model_params)
end
def model_params
    params.fetch(:model, {}).permit(:child_model => [:name, :other])
end

请求:

1
post 'api.address/model', :model => { :child_model => { :name =>"some name" } }

型号:

1
accepts_nested_attributes_for :child_model

错误:

预期的 ChildModel,得到 ActionController::Parameters

尝试此方法无济于事:http://www.rubyexperiments.com/using-strong-parameters-with-nested-forms/


你在你的项目模型上使用 accepts_nested_attributes_for :books 吗?如果是这样,那么键应该是 "books_attributes".

而不是 "books"

1
2
3
def project_params
  params.permit(:id, :complete, :false, :private, books_attributes: [:id, :name])
end


我正在使用 Angular.js


n


n


n


n