搜索全名,在两个字段firstname和lastname rails中



我正在为我的应用程序处理一个搜索框,我有两个字段firstname和lastname。我为它们创建了一个full_name方法。

配置文件型号:

def full_name
"#{self.firstname} #{self.lastname}"
end

这是我搜索的方法

def self.search_by_full_name(search)
where("(fisrtname || lastname) LIKE :q", :q => "%#{search}%")
end

配置文件控制器:

def index
 if params[:search]
  @profile = Profile.search_by_full_name(params[:search])
  else
  @profile = Profile.all
end

结束

您可以将其作为

where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%")

或者你可以创建一个范围

scope :search_by_full_name ->(query) { where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%") }

做这个简单的技巧

   def self.search_by_full_name(search)
   @names = search.split(" ")
   where("first_name LIKE ? AND last_name LIKE ?", "%#{@names[0]}","%#{@names[1]}" )
end

我遇到了同样的问题,所以,为了涵盖每一个案例场景。

这种情况的最佳解决方案如下

where("CONCAT(first_name,' ',last_name) iLIKE ? OR CONCAT(last_name,' ',first_name ) iLIKE ?", "%#{query}%", "%#{query}%")

p.S.请确保首先在查询中应用squish方法query = search.squish

我的建议和它更接近您的

def self.search_by_full_name(search)
    where("fisrtname LIKE :search OR lastname LIKE :search", search: "%#{search}%")
end

这对我很管用。我使用sqlite

您的查询有点错误:

def self.search_by_full_name(search)
  where("firstname like :search OR lastname like :search", search: "%#{search}%")
end

您可以执行此

User.where("first_name||' '||last_name ilike :name", :name => "%first_name last_name%")

最新更新