Rails:如何过滤结果?

时间:2013-03-18 10:43:46

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

在我的Users控制器的索引操作中,我能够捕获属于ActiveRecord :: Relation对象current_user@users所在城市的所有用户。在我看来,我能够遍历@users并显示结果。我想做的是给current_user更多选项来过滤结果。我想在视图中添加一个表单和过滤器按钮,这将允许current_user选择过滤器,例如:

  1. 最低年龄和最高年龄(下拉)
  2. 宗教信仰(下拉复选框)
  3. 饮食(下拉复选框)
  4. 等等。
  5. 当current_user进行选择并点击过滤器后,将根据所选条件过滤结果。我想知道如何构建查询来执行此操作?

2 个答案:

答案 0 :(得分:9)

通过在用户模型中创建范围方法,在没有库的情况下自己完成此操作也相对简单。例如:

 class User

   def self.filtered_by_age(opts = {})
     min = opts[:min]
     max = opts[:max]
     user = User.arel_table

     if min && max
       self.where(:age => min..max)
     elsif min && !max
       self.where(user[:age].gt(min))
     elsif max && !min
       self.where(user[:age].lt(max))
     else
       self.all
     end
   end

 end

然后您可以使用

进行调用
@users.filtered_by_age(min: 25, max: 52)

答案 1 :(得分:4)

最好的赌注是Ranksack:https://github.com/ernie/ransack 这提供了以搜索为中心的功能。

OR

Squeel为ActiveRecord的高级查询提供了一个易于使用的界面:https://github.com/ernie/squeel