ruby-on-rails 如何在UI中搜索组合的first_name和last_name

dwthyt8l  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(101)

在我现有的查询中,我只能分别搜索first_name和last_name。例如,客户信息来自客户故事,姓名来自first_name和last_name列。First_name列有姓名“John”,last_name列有“Doe”如果我在UI中只搜索John或Doe,则会显示客户的全部数据。如果我搜索“John Doe”,则不会显示客户详细信息。
第一个月
我如何修改它?

fsi0uk1n

fsi0uk1n1#

您可以像这样连接first_namelast_name列,并使用该值进行搜索:

customers = customers.where("identifier 
LIKE ? OR (first_name || ' ' || last_name) 
LIKE ? OR customers.email LIKE ? OR institutional_groups.name 
LIKE ?", q, "%#{q}%", q, q) 
if q.present?

字符串

dnph8jn4

dnph8jn42#

让我们考虑这四种情况:

*只有名字搜索first_name LIKE :query
*只有姓氏搜索last_name LIKE :query
*名后接姓搜索CONCAT(first_name, ' ', last_name) LIKE :query
*姓氏后接名字搜索CONCAT(last_name, ' ', first_name) LIKE :query

对于部分匹配,可以用%包围query

Customer.where("
   first_name LIKE :query OR 
   last_name LIKE :query OR 
   CONCAT(first_name, ' ', last_name) LIKE :query OR
   CONCAT(last_name, ' ', first_name) LIKE :query
", query: "%#{query}%")

字符串
对于完全匹配,请删除%字符。

Customer.where("
  first_name LIKE :query OR 
  last_name LIKE :query OR 
  CONCAT(first_name, ' ', last_name) LIKE :query OR
  CONCAT(last_name, ' ', first_name) LIKE :query
", query: query)


参考文献:

相关问题