关于 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
  • 谢谢 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/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8936.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?