0

我發現我已經在Rails控制器中做了足夠多次,我有興趣找到更好的寫法(如果可能)。實質上,我將驗證輸入爲幾個選項,如果輸入與任何選項不匹配,則會回到默認值。寫這個數組包含/默認後備代碼更簡潔的方式?

valid_options = %w(most_active most_recent most_popular) 
@my_param = valid_options.include?(params[:my_param]) ? params[:my_param] : 'most_recent' 
+0

我不覺得有什麼不對,你現在做的方式。任何比這更加粗糙,你最終會犧牲幾個字符的可讀性 – Doydle

回答

3

如果使用散列代替數組,它會更快更乾淨。而且,由於您的默認值是"most_recent",因此valid_options中的"most_recent"是多餘的。你最好刪除它。

filter_options = 
Hash.new("most_recent") 
.merge("most_popular" => "most_popular", "most_active" => "most_active") 

@my_param = filter_options[params[:my_param]] 
+0

謝謝,我認爲沿着一個哈希線的東西會更快,我可以使用'#fetch'方法作爲回退值,但爲'#new'運算符提供回退值的想法實際上是一個好主意,我喜歡它!要留下這個問題,看看是否有其他想法,但如果沒有更好的,那麼我可能會接受這一點。 –

+0

隨時接受任何答案。使用'fetch'也可以。 – sawa

0

如何爲以下:

valid_options = %w(most_active most_recent most_popular) 
valid_options.detect(proc{'default_value'}){|i| i == params[:my_param] } 

還有一句:

valid_options = %w(most_active most_recent most_popular) 
valid_options.dup.delete(params[:my_param]) { "default" } 
0

有點牽強。

valid_options = %w(most_active most_recent most_popular) 
(valid_options & [params[:my_param]]).first || 'most_recent' 
1

我也會去哈希路線。

這可能是可以想象的:

Hash[valid_options.zip valid_options].fetch(params[:my_param], "most_recent") 
相關問題