我发现在我的Rails控制器中我已经做了足够多次这样的事情,我有兴趣找到一种更好的方式来编写它(如果可能的话)。基本上,我正在验证几个选项的输入,如果输入与任何选项都不匹配,则返回默认值。
valid_options = %w(most_active most_recent most_popular)
@my_param = valid_options.include?(params[:my_param]) ? params[:my_param] : 'most_recent'
答案 0 :(得分:3)
如果使用哈希而不是数组,它会更快更干净。而且,由于您的默认值为"most_recent"
,因此"most_recent"
中的valid_options
是多余的。你最好把它删除。
filter_options =
Hash.new("most_recent")
.merge("most_popular" => "most_popular", "most_active" => "most_active")
@my_param = filter_options[params[:my_param]]
答案 1 :(得分:1)
我也会去哈希路线。
这可以想象:
Hash[valid_options.zip valid_options].fetch(params[:my_param], "most_recent")
答案 2 :(得分: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" }
答案 3 :(得分:0)
有点牵强。
valid_options = %w(most_active most_recent most_popular)
(valid_options & [params[:my_param]]).first || 'most_recent'