Rails:如何过滤结果?
在我的Users控制器的索引操作中,我能够捕获与ActiveRecord :: Relation对象@users
的current_user
属于同一城市的所有用户。 在我看来,我能够遍历@users
并显示结果。 我想做的是给current_user
更多选项来过滤结果。 我想在视图中添加一个表单和filter按钮,这将允许current_user选择filter,例如:
- 最低年龄和最大年龄(下拉)
- 宗教(下拉复选框)
- 饮食(下拉复选框)
- 等等。
一旦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