[英]How to use the search in acts as taggable
我正在使用可標記的寶石。
我想在單個搜索字段中同時使用名稱和標簽進行搜索
我的模特
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
幫我解決這個問題。
一種方法是使用+將兩個結果相加:
@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}%") }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.