编写此数组包含/默认回退代码的更简洁方法?

时间:2013-07-26 15:22:01

标签: ruby default-value ternary-operator sanitization input-sanitization

我发现在我的Rails控制器中我已经做了足够多次这样的事情,我有兴趣找到一种更好的方式来编写它(如果可能的话)。基本上,我正在验证几个选项的输入,如果输入与任何选项都不匹配,则返回默认值。

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

4 个答案:

答案 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'