簡體   English   中英

Rails 4:具有可變鍵哈希的強參數

[英]Rails 4: strong parameter with variable key hash

我需要能夠允許包含帶有變量鍵的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 ])

您可以執行此操作,它將起作用。 但是您需要注意這些值。

params.require(:consult_stat).permit!

它將允許使用hash Consult_stat及其任何子哈希。

強大的params方法只是ruby,您不必提供文字哈希作為參數permit ,您可以提供基於params存在的“ iter_”鍵創建的哈希:

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] }]
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM