【发布时间】:2013-05-22 01:48:51
【问题描述】:
在 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 相同“除了例外”现在给我们带来了一个错误,我希望它会在未来给许多开发者带来错误。
我做错了吗?如果是这样,为什么这不是一个真正的问题,我应该做些什么不同的事情?请注意,让我走上这条道路的用例正是来自 docs for format= 的用例。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 strong-parameters