ruby-on-rails - view教程 - ruby on rails教程




Rails 4-强大的参数-嵌套对象 (2)

允许嵌套对象:

params.permit( {:school => [:id , :name]}, 
               {:student => [:id, 
                            :name, 
                            :address, 
                            :city]},
                {:records => [:marks, :subject]})

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

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

{
  "name" : "abc",
  "groundtruth" : {
    "type" : "Point",
    "coordinates" : [ 2.4, 6 ]
  }
}

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

params.require(:measurement).permit(:name, :groundtruth)

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

如果我只是设置:

params.require(:measurement).permit!

一切都按预期得到保存,但当然,这会杀死强参数提供的安全性。

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


听起来很奇怪,当你想要允许嵌套属性时,你可以在数组中指定嵌套对象的属性。 在你的情况下,它会

根据@RafaelOliveira建议更新

params.require(:measurement)
      .permit(:name, :groundtruth => [:type, :coordinates => []])

另一方面,如果你想嵌套多个对象,那么你把它包裹在一个哈希里面......就像这样

params.require(:foo).permit(:bar, {:baz => [:x, :y]})


实际上,Rails在这方面有很好的文档: api.rubyonrails.org/classes/ActionController/… : api.rubyonrails.org/classes/ActionController/…

为了进一步说明,你可以看看permitstrong_parameters本身的实现: github.com/rails/rails/blob/master/actionpack/lib/…github.com/rails/rails/blob/master/actionpack/lib/…





strong-parameters