Rails请求参数

时间:2014-04-16 15:15:08

标签: ruby-on-rails ruby-on-rails-4

我正在使用Devise 4.1处理Rails 3.2.4应用。

我正在捣乱移动API工作流程,我只是注意到一些奇怪的东西。

如果我将此POST提交给用户控制器(此处我简化了网址):

POST    /api/mobile_sign_in.json

body (json):
{
    "email" : "test@example.com",
    "password" : "foobar"
}

Rails创建此参数哈希:

{ "email"    => "test@example.com",
  "password" => "foobar",
  "user"     => {
    "email" => "test@example.com"
  }
}

也就是说,它会在参数中添加一个新成员user: { email: "string" }


如果我发送一个空的json对象,会发生类似的事情:

POST    /api/mobile_sign_in.json

body (json):
{}

导致Rails创建此参数哈希:

{ "user" => {} }

如果发送真正的空体,则参数hash正确为空。

使用此功能的强参数(还)。


更新

我可以确认这也发生在其他控制器中。

例如,在LocationsController < ApplicationController中,rails会自动分组(并复制)那些可以映射到记录的属性。

{ "authentication_token" => "blablablablabla",
  "title"                => "test title",
  "body"                 => "one two three",
  "latitude"             => "0.0",
  "longitude"            => "0.0",
  "timestamp"            => "2014-04-16T16:28:20.441+01:00",
  "user_id"              => "1",
  "journey_id"           => "1",
  "location" => {
    "title" => "test title",
    "body" => "one two three",
    "latitude" => "0.0",
    "longitude" => "0.0",
    "timestamp" => "2014-04-16T16:28:20.441+01:00"
  }
}

在这种情况下,会自动添加"location" => {}哈希值 我还没有使用强大的参数,我只是尝试使用测试工具。

此控制器无设计

1 个答案:

答案 0 :(得分:1)

Rails会自动为JSON请求执行此操作,以便轻松访问模型。 可以通过将wrap_parameters false块添加到控制器来关闭它。

MyController < ApplicationController
  wrap_parameters false
end

欲了解更多信息, ActionController::ParamsWrapper