Rails:如何过滤结果?

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

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

一旦current_user进行选择并点击filter,结果将根据所选标准进行过滤。 我想知道如何构建查询来执行此操作?

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

  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) 

最好的选择是Ranksack: https : //github.com/ernie/ransack这提供了搜索function。

要么

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