2016-08-03 100 views
2

我正在为我的应用程序的搜索框中我有两个字段的名字和姓氏。我为他们创建了一个full_name方法。搜索全名,在两个字段firstname,姓氏rails

剖面模型:

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 

回答

1

做这个简单的一招

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

它的作品,但如果我搜索姓氏它输出nill – wiwit

+0

再次看到我的答案。这只是为全名搜索,如果你使用两个,那么你可以使用OR而不是AND在sql –

+0

感谢您的答复,如果我使用或他们工作正常,但如果我给他姓氏,他给我所有配置文件 – wiwit

7

你可以做到这一点作为

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

,或者你可以创建一个范围

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

的SQLite3 ::的SQLException:没有这样的功能:CONCAT_WS:选择 “配置文件” * FROM “配置文件” WHERE(CONCAT_WS(””,名字,姓氏)LIKE '%杰西·卡斯特罗%') – wiwit

+1

。 SQLite不推荐用于rails。请使用MYSQL或Postgres –

1

我的建议,其更接近你有什么

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

这为我工作湖我使用SQLite

+0

你是否尝试只搜索姓氏? – wiwit

+0

我尝试了名字和姓氏 – mrvncaragay

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