在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"
Rails 4:
params # set @_params to Parameters.new(request.parameters)
request.format = "mobile"
params[:format]
=> nil
这在技术上不是一个错误,因为客户端代码很容易找到request.format
而不是params[:format]
作为此信息的真实来源(并且不希望能够同时使用这两者)可互换)。
但它感觉就像一个设计回归给我。让params
和request.parameters
相同“除了异常”现在给我们造成了一个错误,我希望它会在未来给许多开发者带来错误。
我做错了吗?如果是这样,为什么这不是一个问题,我应该做些什么呢?请注意,使我沿着这条路走下去的用例是docs for format=中的确切用法。
答案 0 :(得分:1)
这可能是这种情况,因为params
哈希旨在成为应用程序的业务数据,而request.format
表示HTTP请求响应请求。因此,您对params
的内容所做的工作仍然是相同的,但您可以灵活地更改请求格式而无需更改业务数据。
将其视为关注点的分离。