簡體   English   中英

動作控制器的強參數值可以是標量或數組?

[英]action controller strong params with value that can be either scalar OR array?

我有一個以這種方式接收數據的端點:

{:stuff => [ { :name => 'item_1', :value => [ { :arcade_game => "Dragon's Lair", :manufacturer => "Cinematronics", } ] }, { :name => 'item_2', :value => 'something else' } ] }

因為有些值是標量的,有些是數組,所以這有問題,因為:

params.permit(:stuff => [:name, :value]).require(:stuff)

會給我:

=> [{"name"=>"item_1"}, {"name"=>"item_2", "value"=>"something else"}]

params.permit(:stuff => [:name, :value => [:manufacturer, :arcade_game]]).require(:stuff)

會給我:

=> [{"name"=>"item_1", "value"=>[{"manufacturer"=>"Cinematronics", "arcade_game"=>"Dragon's Lair"}]}, {"name"=>"item_2", "value"=>nil}]

...

因此,我能解決這個問題的唯一方法就是做一些看起來和感覺都非常糟糕的事情:

params.permit(:stuff => [:name, :value]).tap do |whitelisted|
    params[:stuff].each_with_index do |stuff, index| 
        whitelisted[:stuff][index][:value] = params[:stuff][index].permit(:name, :value => [:arcade_game, :manufacturer]).require(:value) if params[:stuff][index][:value].is_a?(Array)
    end
end}.require(:stuff)

ewwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

您應該如何處理這樣的動態值???

嘗試以下方法。 我認為它將允許標量和數組類型的值。

params.permit(:stuff => []).require(:stuff)

暫無
暫無

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

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