【问题标题】:Rails request parametersRails 请求参数
【发布时间】:2014-04-16 15:15:07
【问题描述】:

我正在使用 Devise 3.2.4 开发 Rails 4.1 应用程序。

我正在对移动 API 工作流程进行存根处理,我刚刚注意到一些奇怪的事情。

如果我将此POST 提交给用户控制器(这里我正在简化 URL):

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" => {} }

如果发送一个真正空正文,则参数哈希正确为空。

为此函数使用强参数(目前)。


更新

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

例如,在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" => {} 哈希会自动添加。
我还没有使用强参数,我只是在试验一个测试工具。

此控制器无需设计

【问题讨论】:

  • 您可以发布您的mobile_sign_in 操作的代码吗?
  • 它没有做任何有趣的事情。它使用params[:email] 找到User,然后使用Devise 方法验证密码。如果正确则返回用户记录,否则返回 false。它不会操纵params 对象。
  • 向问题添加了更多信息
  • 这通常是因为无效的 HTML 代码。
  • @ParitoshPiplewar 可能是……但这不是 HTML 表单提交。我正在使用 curl 和另一个测试工具,它只是提交 HTTP 请求。不涉及 HTML。

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


【解决方案1】:

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

MyController < ApplicationController
  wrap_parameters false
end

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

【讨论】:

  • 好的,谢谢!我完全忘记了 wrap_parameters 的那个功能,我认为它只会影响 ActiveRecord 的to_json 的东西。现在知道了,其实还是蛮有用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 2015-12-23
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多