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

use*_*165 5 ruby-on-rails strong-parameters ruby-on-rails-4

在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"
Run Code Online (Sandbox Code Playgroud)

导轨4:

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

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

但这对我来说感觉就像一个设计回归.拥有paramsrequest.parameters相同的"除了例外"现在给我们造成了一个错误,我希望它在未来会给许多开发者造成错误.

我做错了吗?如果是这样,为什么这不是一个问题,我应该做些什么呢?请注意,使我沿着这条路径走下去的用例与format =文档完全一致.

Ric*_*ora 1

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

将其视为关注点分离。