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 & [params[:my_param]]).first || 'most_recent'
于 2013-07-26T15:35:11.500 に答える
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 に答える