我在我的应用程序的搜索框中工作我有两个字段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
端
答案 0 :(得分:9)
你可以这样做
where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%")
或者您可以创建范围
scope :search_by_full_name ->(query) { where("CONCAT_WS(' ', first_name, last_name) LIKE ?", "%#{query}%") }
答案 1 :(得分:1)
执行此简单操作
def self.search_by_full_name(search)
@names = search.split(" ")
where("first_name LIKE ? AND last_name LIKE ?", "%#{@names[0]}","%#{@names[1]}" )
end
答案 2 :(得分:1)
我的建议和它更接近你拥有的东西
def self.search_by_full_name(search)
where("fisrtname LIKE :search OR lastname LIKE :search", search: "%#{search}%")
end
这对我很有用。我使用sqlite
答案 3 :(得分:1)
您的查询有点错误:
def self.search_by_full_name(search)
where("firstname like :search OR lastname like :search", search: "%#{search}%")
end