【问题标题】:The dig method does not work correctly with ActionController::Parametersdig 方法不能与 ActionController::Parameters 一起正常工作
【发布时间】:2018-12-28 11:50:39
【问题描述】:

文档:https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-dig

我运行rails c 并写下这个:

params = ActionController::Parameters.new(foo: { bar: { baz: 1 } })

还有:

params.dig(:foo, :bar, :baz)

这两行是我从页面中提取的,上面给出了链接。

结果,我得到了nil

使用Hash 时一切正常。使用ActionController::Parameters 时出现问题。我在 Rails 应用程序中遇到了这个问题。

需要您对此发表意见。

【问题讨论】:

  • @AlekseiMatiushkin params.dig(*%w[foo bar baz]) => nil nope :( 我尝试了字符串和符号,并将它们组合在一起......
  • 刚刚复制并粘贴了您的代码,它返回1。你用的是什么版本的rails?
  • @P.Boro ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]Rails 5.2.2
  • params.to_unsafe_h.dig(:foo, :bar, :baz)?,想知道不安全的部分。
  • 请看here,ActionController::Parameters 从 Rails 4 到 Rails 5 发生了一些变化。

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

ActionController::Parameters 是 Hash 的子类,你可以使用 params 哈希上的 to_h 方法直接将其转换为哈希。

但是 to_h 仅适用于列入白名单的参数,因此您可以执行以下操作:

params = ActionController::Parameters.new(foo: { bar: { baz: 1 } })
params.permit!
params.to_h.dig(:foo, :bar, :baz)

但如果您不想加入白名单,则只需使用 to_unsafe_h 方法即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 2014-07-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多