rails是否会创建一个新的params [:model]哈希?

时间:2012-12-13 00:11:33

标签: ruby-on-rails backbone.js

我想检查一下我所看到的行为是否确实是我认为的。

我已经用Google搜索了答案,但找不到任何确认这是预期行为的文档。

我正在使用Backbone 0.9.2.1和Rails 3.2.3

当我将模型保存在主干中时,我正在查看HTTP标头并看到它发送了一个JSON表示,例如

{"title":"I think...","id":2,...}

在控制器里面,我一直心不在焉地使用params [:意见],奇怪的是工作正常,但现在我遇到了麻烦,我注意到我的params hash实际上是

{"title" => "I think...",
"id" => 2
"opinion" => {"title" => "I think ..."},
...

(我遇到麻烦的原因是id存在于params [:id]但不是params [:opinion] [:id]

在我看来,在调用控制器方法之前,任何与attr_accessible名称匹配的参数都会映射到此params [:opinion]哈希值。

该模型当然是意见。 控制器名为opinion_controller,正在通过此路由到达:

  resources :stories, :controller => 'opinions'

(在重命名某些事情的过程中)

这是预期的行为吗? 有人能指出我可以阅读的文档吗?

1 个答案:

答案 0 :(得分:2)

是的,我遇到了同样的事情,并且想知道wtf。如你所见,Rails自动包装它。改变: https://github.com/rails/rails/pull/359

修改 从API文档: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

By default, if you don’t specify the key in which the parameters would be wrapped to, ParamsWrapper will actually try to determine if there’s a model related to it or not.

这个答案也很好地描述了它: https://stackoverflow.com/a/9134057/341692