【问题标题】:Rails 4: setting request.format does not update params[:format]Rails 4:设置 request.format 不会更新 params[:format]
【发布时间】:2013-05-22 01:48:51
【问题描述】:

在 Rails 3 中,paramsrequest.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 相同“除了例外”现在给我们带来了一个错误,我希望它会在未来给许多开发者带来错误。

我做错了吗?如果是这样,为什么这不是一个真正的问题,我应该做些什么不同的事情?请注意,让我走上这条道路的用例正是来自 docs for format= 的用例。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 strong-parameters


    【解决方案1】:

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

    将其视为关注点分离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2012-01-21
      • 1970-01-01
      相关资源
      最近更新 更多