我想检查我所看到的行为是否确实如我所想。
我已在 Google 上搜索答案,但找不到任何文档来确认这是预期行为。
我正在使用 Backbone 0.9.2.1 和 Rails 3.2.3
当我将模型保存在主干中时,我会查看 HTTP header 并看到它发送 JSON 表示形式,例如
{"title":"I think...","id":2,...}
在 Controller 内部,我一直心不在焉地使用 params[:opinion],奇怪的是它工作得很好,但现在我遇到了麻烦,我注意到我的 params 哈希实际上是
{"title" => "I think...",
"id" => 2
"opinion" => {"title" => "I think ..."},
...
(我遇到问题的原因是 params[:id] 中存在 id,但 params[:opinion][:id] 中不存在 id
在我看来,在调用 Controller 方法之前,任何与 attr_accessible 名称匹配的参数都会映射到此 params[:opinion] 哈希中。
模型当然是意见。 该 Controller 称为opinion_controller,并通过以下路线到达:
resources :stories, :controller => 'opinions'
(正在重命名一些东西)
这是预期的行为吗? 有人可以向我指出可以阅读此内容的文档吗?
最佳答案
是的,我遇到了同样的事情,并且想知道wtf。 Rails 自动包装它,如您所见。改变: https://github.com/rails/rails/pull/359
编辑: 来自 API 文档: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html
默认情况下,如果您不指定参数将被包装到的键,ParamsWrapper 实际上会尝试确定是否存在与其相关的模型。
这个答案也描述得很好: https://stackoverflow.com/a/9134057/341692
关于ruby-on-rails - Rails 是否创建了新的参数[:model] hash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850934/