相关疑难解决方法(0)

Rails 4 - 强参数 - 嵌套对象

我有一个非常简单的问题.但到目前为止还没有找到解决方案.

所以这是我发送给服务器的JSON字符串:

{
  "name" : "abc",
  "groundtruth" : {
    "type" : "Point",
    "coordinates" : [ 2.4, 6 ]
  }
}
Run Code Online (Sandbox Code Playgroud)

使用新的许可方法,我得到:

params.require(:measurement).permit(:name, :groundtruth)
Run Code Online (Sandbox Code Playgroud)

这不会引发任何错误,但创建的数据库条目包含null而不是groundtruth值.

如果我只是设置:

params.require(:measurement).permit!
Run Code Online (Sandbox Code Playgroud)

所有东西都按预期保存,但当然,这会破坏强参数提供的安全性.

我找到了解决方案,如何允许数组,但没有找到使用嵌套对象的单个示例.这必须是某种可能的,因为它应该是一个非常常见的用例.那么它是怎样工作的?

ruby-on-rails nested-attributes strong-parameters ruby-on-rails-4

135
推荐指数
3
解决办法
10万
查看次数

strong参数允许嵌套属性的所有属性

强参数中是否有一种方法可以允许nested_attributes模型的所有属性?这是一个示例代码.

class Lever < ActiveRecord::Base
 has_one :lever_benefit
 accepts_nested_attributes_for :lever_benefit
end

class LeverBenefit < ActiveRecord::Base
  # == Schema Information
  #  id          :integer          not null, primary key
  #  lever_id    :integer
  #  explanation :text
end
Run Code Online (Sandbox Code Playgroud)

对于杠杆强参数,我正在写这个

def lever
 params.require(:lever).permit(:name,:lever_benefit_attributes => [:lever_id, :explanation])
end
Run Code Online (Sandbox Code Playgroud)

有没有办法可以编写嵌套属性来允许所有属性而不显式赋予属性名称lever_idexplanation

注意:请不要与此问题混淆,permit!或者permit(:all)这是为了允许所有嵌套属性

ruby ruby-on-rails ruby-on-rails-3.2 strong-parameters ruby-on-rails-4

30
推荐指数
6
解决办法
3万
查看次数