在Rails 3中,params并request.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]作为此信息的真实来源(并且不希望能够互换使用).
但这对我来说感觉就像一个设计回归.拥有params和request.parameters相同的"除了例外"现在给我们造成了一个错误,我希望它在未来会给许多开发者造成错误.
我做错了吗?如果是这样,为什么这不是一个问题,我应该做些什么呢?请注意,使我沿着这条路径走下去的用例与format =的文档完全一致.