2016-09-21 34 views
0

背景:Rails類似於常量查詢

我有一個搜索框,充當基於名字,姓氏,ID和全名選擇客戶的過濾器。我想添加角色,但我希望它是一個AND子句,我希望它是不變的。我的用戶可以是'客戶'或'預計',我只想顯示實際的客戶。

問:

什麼是構建一個類似的查詢,像這樣的最佳方式:

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

你可以這樣做:由於您使用的Postgres

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) 

可以使用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) 
+0

該訣竅。我不知道你可以將相同的方法鏈接到它自己。我想沒有理由不起作用,但我不知道爲什麼我從來沒有想到這一點。謝謝! –