5

在 Rails 3 中,params引用request.parameters相同的对象。

随着在 Rails 4 中添加强参数,params现在指的ActionController::Parameters是从request.parameters.

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

导轨 3:

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

导轨 4:

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

request.format从技术上讲,这不是一个错误,因为客户端代码很容易将其params[:format]视为此信息的真实来源(并且不希望能够互换使用两者)。

但这对我来说感觉像是一种设计回归。拥有paramsrequest.parameters保持相同的“除了例外”现在给我们带来了一个错误,我希望它会在未来给许多开发人员带来错误。

我做错了吗?如果是这样,为什么这不是一个真正的问题,我应该做些什么不同的事情?请注意,使我走上这条道路的用例与format= 文档中的用例完全相同。

4

1 回答 1

1

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

将其视为关注点分离。

于 2015-10-30T15:25:15.123 回答