我正在使用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" => {}
哈希值
我还没有使用强大的参数,我只是尝试使用测试工具。
此控制器无设计。
答案 0 :(得分:1)
Rails会自动为JSON请求执行此操作,以便轻松访问模型。
可以通过将wrap_parameters false
块添加到控制器来关闭它。
MyController < ApplicationController
wrap_parameters false
end
欲了解更多信息, ActionController::ParamsWrapper