0

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

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

4 回答 4

3

如果你使用散列而不是数组,它会更快更干净。而且,由于您的默认设置是"most_recent",因此"most_recent"invalid_options是多余的。你最好把它去掉。

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

@my_param = filter_options[params[:my_param]]
于 2013-07-26T15:51:51.003 回答
1

我也会走哈希路线。

这可以想象:

Hash[valid_options.zip valid_options].fetch(params[:my_param], "most_recent")
于 2013-07-26T16:00:58.007 回答
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" }
于 2013-07-26T15:30:20.293 回答
0

有点牵强。

valid_options = %w(most_active most_recent most_popular)
(valid_options & [params[:my_param]]).first || 'most_recent'
于 2013-07-26T15:35:11.500 回答