背景:
我有一个搜索框,用作根据名字,姓氏,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。
答案 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)