【问题标题】:How to permit all values from a hash如何允许哈希中的所有值
【发布时间】:2016-09-29 21:36:05
【问题描述】:

我在 Ruby on Rails 中工作,我正在尝试使用 Ruby 的 permit 函数允许哈希中的所有值。这似乎很简单,但我无法让它发挥作用。我已经查看了有关许可的参考资料,以及对这个 SO 问题 how to permit an array with strong parameters 的回答。

这是我的代码

PERMITTED_PARAMS = [
  :OriginCity,
  :OriginState,
  { :PickupDates => {}}
].freeze
params = {"OriginCity"=>"Denver", "OriginState"=>"CO", "PickupDates"=>{"0"=>"2016-09-30"}}
filtered_params = params.permit(PERMITTED_PARAMS)

而且,filtered_pa​​rams 的结果值为

{"OriginCity"=>"Denver", "PickupDates"=>{}}

而filtered_pa​​rams的期望值是

{"OriginCity"=>"Denver", "PickupDates"=>{"0":"2016-09-30"}}

关于如何通过更改 PERMITTED_PARAMS 获得所需值的任何建议?

【问题讨论】:

    标签: ruby-on-rails arrays ruby hash


    【解决方案1】:

    您希望允许散列中的所有值,而不是数组,这与您链接到的示例不同。

    试试这个:

    PERMITTED_PARAMS = [
      :OriginCity,
      :OriginState
    ].freeze
    params = {"OriginCity"=>"Denver", "OriginState"=>"CO", "PickupDates"=>{"0"=>"2016-09-30"}}
    filtered_params = params.permit(PERMITTED_PARAMS).tap do |whitelisted|
      whitelisted[:PickupDates] = params[:PickupDates]
    end
    

    另请参阅:Strong parameters: allow hashes with unknown keys to be permitted

    【讨论】:

    • :PickupDates => params[:PickupDates].try(:keys) 可能会更好,然后您就可以轻松地过滤出符合您期望的内容的密钥:例如:PickupDates => params[:PickupDates].try(:keys).to_a.select { |k| Integer(k) rescue nil }。我找不到一种方法来为强大的参数提供一个正则表达式来匹配键,所以你只能手动操作。
    • 太棒了!是的,接受所有参数有点宽容,但开箱即用的强参数对你没有多大作用。如果您担心,您可以只过滤您想要的键等,但代码会变得更加复杂......
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    相关资源
    最近更新 更多