Rails 4:设置request.format不更新params [:format]

时间:2013-05-22 01:48:51

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

在Rails 3中,paramsrequest.parameters指的是同一个对象。

在Rails 4中添加了强参数后,params现在引用了从ActionController::Parameters创建的request.parameters的独特实例。

这样做的副作用是,一旦您调用params(从而创建了不同的Parameters对象),调用request.format=将不会更新params

Rails 3:

params # set @_params to request.parameters
request.format = "mobile"
params[:format]
=> "mobile"

Rails 4:

params # set @_params to Parameters.new(request.parameters)
request.format = "mobile"
params[:format]
=> nil

这在技术上不是一个错误,因为客户端代码很容易找到request.format而不是params[:format]作为此信息的真实来源(并且不希望能够同时使用这两者)可互换)。

但它感觉就像一个设计回归给我。让paramsrequest.parameters相同“除了异常”现在给我们造成了一个错误,我希望它会在未来给许多开发者带来错误。

我做错了吗?如果是这样,为什么这不是一个问题,我应该做些什么呢?请注意,使我沿着这条路走下去的用例是docs for format=中的确切用法。

1 个答案:

答案 0 :(得分:1)

这可能是这种情况,因为params哈希旨在成为应用程序的业务数据,而request.format表示HTTP请求响应请求。因此,您对params的内容所做的工作仍然是相同的,但您可以灵活地更改请求格式而无需更改业务数据。

将其视为关注点的分离。