我正在使用acts-as-taggable-on gem。
我想在单个搜索字段中使用搜索名称和标签
我的模特
class User < ActiveRecord::Base
acts_as_taggable
attr_accessor: :name, :age, :country, tag_list
def self.search(search)
if search
where('name LIKE ?', "%#{search}%")
else
scoped
end
end
end
控制器
class UserAppsController < ApplicationController
def index
@users = User.search(params[:search])
//@users = User.tagged_with(params[:search])
end
end
帮我解决这个问题。
答案 0 :(得分:1)
一种方法是使用+:
将两个结果相互添加@users = User.search(params[:search])
@users = @users + User.tagged_with(params[:search])
更好的解决方案是在模型中更改搜索方法以返回完整结果:
where('name LIKE ?', "%#{search}%") + tagged_with(search)
但是如果你想从标签搜索中拆分名称搜索,你可以将它们拆分成范围或类似的东西,然后使用它:
scope :name_contains, -> (query) { where('name LIKE ?', "%#{query}%") }
并在您的搜索方法中:
name_contains(search) + tagged_with(search)
顺便说一下,如果你希望名称搜索不区分大小写,请使用类似:
scope :name_contains, -> (query) { where("REPLACE (lower(name), ' ', '' ) like ?", "%#{query.downcase}%") }