Rails 3 params不需要的包装

时间:2012-02-03 18:29:47

标签: ruby-on-rails ruby-on-rails-3

我正在向我的Rails 3控制器ExampleController发布一些JSON,如{:name => "hello"}的JSON形式。

而不是像params那样:

{:name => "hello"}

我得到了:

{:name => "hello", :controller => "example", :action => "index", :example => {:name => "hello"}

(是的,JSON数据出现两次!并添加了动作和控制器)

知道为什么吗?

1 个答案:

答案 0 :(得分:35)

ActionController会自动为JSON请求执行此操作,以便您可以轻松地将参数传递到Example.create@example.update_attributes,这意味着客户端无需为您的模型打包它们 - 它可以只包括name等。人。在JSON数据的顶层,控制器将处理分组。

@example = Example.create params[:example]

参数包装代码从控制器的名称获取模型的名称,但您可以使用控制器中的wrap_parameters宏来更改它:

wrap_parameters :thing

或者用

将其关闭
wrap_parameters false

在Rails 3.2中,如果您的模型使用attr_accessible,参数包装功能也将排除任何质量分配无法访问的参数。如果愿意,您还可以使用宏将此包装功能应用于除JSON之外的其他内容类型。

默认情况下,在新创建的Rails应用程序中,这是使用初始化程序为所有控制器配置的。寻找config/initializers/wrap_parameters.rb