0

J'utilise acts-as-taggable-on gem.Comment utiliser la recherche dans les actes comme taggable

je veux utiliser la recherche à la fois le nom ainsi que des balises dans le champ de recherche unique

mon modèle

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 

Contrôleur

class UserAppsController < ApplicationController 

    def index 
    @users = User.search(params[:search]) 
    //@users = User.tagged_with(params[:search]) 
    end 
end 

Aidez-moi à résoudre ce problème.

Répondre

1

Une façon est d'ajouter à la fois les résultats un à l'autre en utilisant +:

@users = User.search(params[:search]) 
@users = @users + User.tagged_with(params[:search]) 

Une meilleure solution sera de changer votre méthode de recherche dans le modèle pour retourner le résultat complet:

where('name LIKE ?', "%#{search}%") + tagged_with(search) 

mais si vous voulez diviser la recherche de nom de la recherche de tag, vous pouvez les diviser en étendues ou quelque chose comme ça et ensuite l'utiliser:

scope :name_contains, -> (query) { where('name LIKE ?', "%#{query}%") } 

et dans votre méthode de recherche:

name_contains(search) + tagged_with(search) 

BTW si vous voulez la recherche de nom pour être insensible cas, utilisez quelque chose comme:

scope :name_contains, -> (query) { where("REPLACE (lower(name), ' ', '') like ?", "%#{query.downcase}%") } 
+0

Merci pour la réponse. Maintenant, j'ai un problème de pagination lorsque nous ajoutons deux scope avec "+" – Mano

+0

scope: tagged_with, lambda {| tag | { : jointures => "Etiquettes INNER JOIN ON taggings.taggable_id = user.id \ Tags INNER JOIN ON tags.id = taggings.tag_id AND taggings.taggable_type = 'Utilisateur'", : conditions => ["tags .name =? ", tag] } – Mano

+0

J'ai résolu mon problème de pagination de tagged_with en ajoutant' .order (: id) 'au résultat ... alors essayez' @ users.order (: id) ' –