0

要检查范围,我会做这样的事情,这对我有用

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

这稍后用作直接查询的条件。

背景

现在我有一个可以给我多个值的选择选项。假设在查找表单中,用户从短、中、长三个选项中选择持续时间为短、中、长。

<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 回答