0

範囲を確認するには、私にとってはうまくいくこのようなことをします

conditions[:orders][:created_at]=created_start_date..created_end_date if params[:created_start_date].present? and params[:created_end_date].present?

これは、後で直接クエリの条件として使用されます。

バックグラウンド

これで、複数の値が得られる選択オプションができました。検索フォームで、ユーザーが 3 つのオプションを表す短、中、長から短、中を選択したとします。

<select class="advancedSearchFormSelectBox" multiple="multiple" name="filters[duration][]"><option value="Short">Short</option>
<option value="Medium">Medium</option>
<option value="Long">JLong</option></select>

Rails は、配列である params[:duration] で選択された値を直接提供します。

Short は範囲 0..5 、Medium 5..20、Long>50 を表します

質問

さて、上記と同様の状態を可能な限り最良の方法で組み立てるにはどうすればよいでしょうか。このような if-else のような条件をあまり使いたくありませんconditions[:orders][:duration]=0..5 if params[:duration].include?("short)...これが最善の方法でない限り? マッピングはより良い解決策ですか?

4

1 に答える 1

0

このようなものはどうですか:

DURATION_OPTIONS = { 'Short'  => 0..5, 
                     'Medium' => 5..20, 
                     'Long'   => 50..Float::INFINITY }
DURATION_OPTIONS[ params[:duration] ]
于 2013-03-19T15:40:26.973 に答える