像常量查询一样的Rails

时间:2016-09-21 19:43:11

标签: sql ruby-on-rails postgresql

背景:

我有一个搜索框,用作根据名字,姓氏,ID和全名选择客户的过滤器。我也希望将Role添加到那个,但我希望它是一个AND子句,我希望它是常量。我的用户可以是'客户'或者'考虑'我只想展示实际的客户。

问题:

构建Like查询的最佳方法是:

User.where('lower(first_name) LIKE ? OR lower(last_name) LIKE ? OR id % 100 = ? OR lower(full_name) LIKE ? AND role = ?', query, query, query_int, query, 'customer')

注意:

如果这改变了什么,我使用PostgreSQL。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

User.where(role: 'customer')
    .where('lower(first_name) LIKE :q OR lower(last_name) LIKE :q OR lower(full_name) LIKE :q OR id % 100 = :qint', 
            q: "%#{query}%", 
            qint: query_int)

由于您使用的是Postgres,因此您可以使用ILIKE(不区分大小写)

User.where(role: 'customer')
    .where('first_name ILIKE :q OR last_name ILIKE :q OR full_name ILIKE :q OR id % 100 = :qint', 
           q: "%#{query}%", 
           qint: query_int)