2

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

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

我正在使用 Backbone 0.9.2.1 和 Rails 3.2.3

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

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

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

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

(我遇到问题的原因是 id 存在于 params[:id] 而不是 params[:opinion][:id]

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

模型当然是 Opinion。控制器称为 opinion_controller 并通过以下路线到达:

  resources :stories, :controller => 'opinions'

(在重命名一些东西的过程中)

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

4

1 回答 1

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

于 2012-12-13T08:13:43.857 回答