2016-08-03 48 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