0

我正在使用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 

幫我解決這個問題。

回答

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}%") } 
+0

感謝回答。現在,當我們添加兩個範圍時出現分頁問題:「+」 – Mano

+0

範圍: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

+0

我通過在結果中加入'.order(:id)'解決了tagged_with的分頁問題...所以試試'@ users.order(:id)' –