2012-07-11 4 views
0

J'utilise la gemme rails3-jquery-autocomplete pour la recherche semi-automatique d'éléments dans ma base de données. La saisie semi-automatique fonctionne correctement, mais j'aurais besoin d'ajouter une autre condition à la requête générée.Rails 3 - comment ajouter pour compléter automatiquement une autre condition?

Si je commence à écrire une chaîne recherchée, puis est générée requête suivante:

SELECT persons.id, persons.name FROM "persons" WHERE (LOWER(persons.name) ILIKE 'jo%') ORDER BY persons.name ASC LIMIT 10 

Cela me renvoie toutes les lignes où le nom commence à jo.

Mais comment pourrais-je recherche toutes les personnes, dont le nom commence à jo et en même temps, par exemple, la colonne active_person = 1? Y a-t-il un assistant à cet effet ou quelque chose comme ça?

Merci

Répondre

2

Si j'ai bien compris le contexte, alors active_person est un booléen qui indique si l'utilisateur est actif ou non.

Si ce comportement est souhaitable la plupart du temps - que vous effectuez une recherche pour les utilisateurs/personnes qui ne sont alors actif, vous pouvez inclure un default_scope dans votre modèle de personne comme ceci:

class Person < ActiveRecord::Base 
    default_scope where(:active_person => 1) 
end 

De cette façon, toute requête qui est jamais généré sera de vérifier que active_person = 1

en savoir plus sur les étendues par défaut ici: http://apidock.com/rails/ActiveRecord/Base/default_scope/class

+0

Merci, cette solution fonctionne, mais tout particulièrement. Cette ligne de code s'ajoute à chaque requête 'where (: active_person => 1)'. Je devrais ajouter cette ligne juste à quelques-unes des questions ... – user984621

+0

Dans quels cas aimeriez-vous que cette ligne soit appliquée? Si vous pouvez identifier des cas spécifiques, nous pouvons ajouter une condition à l'application de cette ligne. Actions spécifiques du contrôleur? – Andrei

0

changement WHERE (LOWER(persons.name) ILIKE 'jo%')-WHERE (LOWER(persons.name) ILIKE 'jo%') AND active_person = 1

Vous pouvez enchaîner les charges de clauses avec AND s et OR de cette façon.

Notez qu'il s'agit vraiment d'une question sur SQL: votre titre et vos tags sont un peu trompeurs.

+0

Les changements vous avez suggéré sont assez claires, mais le point est - comment mettre à jour la requête, qui est générée avec la gemme. – user984621

1

Je comprends que la réponse de @Andrei est correcte, mais ce ne est pas ce que je cherchais. Je suppose que c'est la même chose pour @ user984621 aussi. Ce que je cherchais, c'est que je veux ajouter une condition supplémentaire à la requête. En lisant ce https://github.com/crowdint/rails3-jquery-autocomplete/blob/master/lib/rails3-jquery-autocomplete/orm/active_record.rb

J'ai trouvé que des rails autocomplete supporte des conditions supplémentaires, il vous suffit de passer un autre paramètre à l'utilisation par défaut, comme celui-ci

autocomplete :user, :name, :where => { :role => 'employee'} 

au lieu de cette

autocomplete :user, :name 
Questions connexes