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 |
无论我在 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 |
- 谢谢 Josh – 我正在使用 Accepts_nested_attributes_for :books 但在更新对象时我没有使用嵌套形式,我使用的是 json 输出。当我将密钥更改为: books_attributes 时,它似乎没有更新书籍并将书籍指定为不允许的参数。
- @AlanH,您需要编辑表单,如下所示: f.fields_for :book, book do |b|
- 谢谢@fl00r,但我通过 AngularJS 传递数据并且没有表格。
- @AlanH你有没有找到解决方案?我面临着完全相同的问题。
- @Duane – 不,我最终分开发布模型,因为我找不到一个好的解决方案。我用另一个例子更新了这个问题。
- @Duane – 试试这个? stackoverflow.com/questions/17584142/…
我正在使用 Angular.js
- 什么是模型序列化器?
- @jerzy 我想他可能在谈论这个。
n
n
n
n
- 这并不是真正直接回答问题。你可以编辑你的帖子,让它直接回答发布的问题吗?
- 我同意最后一条评论,但我对这个回复表示同情,因为从 Rails 4.2.0 开始,接受的答案似乎不起作用。我经历了类似的马戏团,在互联网上搜索解决方案并尝试每种可用的许可模式。我很幸运地设置了一个单独的 json 数组,它接受我解析出来的模型对象的属性,然后手动设置活动记录关联,但这使得客户端和服务器端代码都非常丑陋。
来源:https://www.codenong.com/21490255/