2012-02-03 39 views
18

我发布了一些JSON,如JSON格式的{:name => "hello"}到我的Rails 3控制器ExampleController。Rails 3 params多余的包装

非但没有像params的:

{:name => "hello"} 

我越来越:

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

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

任何想法为什么?

+0

您是否正在设置我在此处编写的content-accept和Accepts标头? http://stackoverflow.com/questions/4914745/post-json-to-rails-server – 2012-02-03 18:37:11

+0

是的 - 它从jQuery $ .ajax发布类型:json – Blacksad 2012-02-03 18:46:52

回答

34

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,参数包装功能也将排除并非大规模屁股访问的任何参数ignment。如果你愿意,你也可以使用宏来使这个包装功能适用于除JSON之外的其他内容类型。

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