如何使用标签中的搜索
问题描述:
我正在使用acts-as-taggable-on宝石。如何使用标签中的搜索
我想用单一搜索领域
我的模型
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}%") }
感谢回答。现在,当我们添加两个范围时出现分页问题:“+” – Mano
范围:tagged_with,lambda {| tag | “ { :joins =>”INNER JOIN taggings ON taggings.taggable_id = user.id \ INNER JOIN tags ON tags.id = taggings.tag_id AND taggings.taggable_type ='User'“, :conditions => [”tags .name =?“,tag] } } – Mano
我通过在结果中加入'.order(:id)'解决了tagged_with的分页问题...所以试试'@ users.order(:id)' –