3

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

  1. 最小年龄和最大年龄(下拉)
  2. 宗教(下拉复选框)
  3. 饮食(下拉复选框)
  4. 等等。

current_user 进行选择并单击过滤器后,将根据所选条件过滤结果。我想知道如何建立一个查询来做到这一点?

4

2 回答 2

10

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

 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)
于 2013-03-18T13:22:19.400 回答
4

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

或者

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

于 2013-03-18T10:51:20.693 回答