在 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]
视为此信息的真实来源(并且不希望能够互换使用两者)。
但这对我来说感觉像是一种设计回归。拥有params
并request.parameters
保持相同的“除了例外”现在给我们带来了一个错误,我希望它会在未来给许多开发人员带来错误。
我做错了吗?如果是这样,为什么这不是一个真正的问题,我应该做些什么不同的事情?请注意,使我走上这条道路的用例与format= 文档中的用例完全相同。