【问题标题】:Rails 4: strong parameter with variable key hashRails 4:具有可变键哈希的强参数
【发布时间】:2016-09-29 15:12:23
【问题描述】:

我需要能够允许包含带有变量键的hash 的参数。我查看了其他解决方案,但似乎没有一个适合我。

参数如下:

{"consult_stat"=>{"iter_0"=>{"employee_id"=>"1", "consults"=>"10", "signed"=>"11"}, "iter_1"=>{"employee_id"=>"1", "consults"=>"10", "signed"=>"11"}, "iter_2"=>{"employee_id"=>"1", "consults"=>"10", "signed"=>"11"}}

...iter_x 参数的数量发生变化。我可以硬编码几次迭代(见下文),但我想要一个更灵活的解决方案,根据提供的参数更改允许的参数。以下适用于iter_5

params.require(:consult_stat).permit(:revenue, :weeks, :weeks_paid_up_front, :additional_weeks, :extensions, :paid_in_full, iter_0: [ :employee_id, :signed, :consults ], iter_1: [ :employee_id, :signed, :consults ], iter_2: [ :employee_id, :signed, :consults ], iter_3: [ :employee_id, :signed, :consults ], iter_4: [ :employee_id, :signed, :consults ], iter_5: [ :employee_id, :signed, :consults ])

【问题讨论】:

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


    【解决方案1】:

    strong params 方法只是 ruby​​,您不必提供文字哈希作为 permit 的参数,您可以提供基于 "iter_" 创建的哈希params中存在的键:

    iter_array = [ :employee_id, :signed, :consults ]
    p = params.require(:consult_stat)
    p.permit(
      :revenue,
      :weeks,
      :weeks_paid_up_front,
      :additional_weeks,
      :extensions,
      :paid_in_full,
      Hash[p.keys.grep(/^iter_\d+$/).map {|k| [k.to_sym, iter_array] }]
    )
    

    【讨论】:

    • 太棒了。我浪费了很多时间试图让它发挥作用。我想是时候学习正则表达式了。避免它太久了
    【解决方案2】:

    您可以这样做,它会起作用。但是您需要注意这些值。

    params.require(:consult_stat).permit!

    它将允许散列consult_stat 和它的任何子散列。

    【讨论】:

    • 你有一个错字。应该是permit!
    • 但这不安全吗?
    • 是的。您可以在其上创建父哈希并使用用户许可,这是唯一的方法。
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2014-01-07
    • 2018-01-28
    • 2013-01-07
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多