使用活动记录检查各种范围

时间:2013-03-19 15:30:17

标签: ruby-on-rails ruby ruby-on-rails-3

要检查范围,我会做一些适合我的事情

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]中的选定值,这是一个数组。

短表示范围0..5,中等5..20,长> 50

问题

现在,我如何以最佳方式构建与上述相似的条件。我不想使用像conditions[:orders][:duration]=0..5 if params[:duration].include?("short)这样的if-else之类的条件等等......除非这是最好的方法吗?是映射更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这样的事情:

DURATION_OPTIONS = { 'Short'  => 0..5, 
                     'Medium' => 5..20, 
                     'Long'   => 50..Float::INFINITY }
DURATION_OPTIONS[ params[:duration] ]