127 votes

Rails de trouver modèle où ne correspond pas

Comment puis-je Rechercher des enregistrements dans ma base de données sur une condition ne correspond pas ? J’ai cela maintenant, mais est il une fantaisie rails-parler façon de le faire ?

Merci

225voto

Vikrant Chaudhary Points 4306

Dans Les Rails 4.x (Voir http://edgeguides.rubyonrails.org/active_record_querying.html#not-conditions)

GroupUser.where.not(user_id: me)

Dans Rails 3.x

GroupUser.where(GroupUser.arel_table[:user_id].not_eq(me))

Pour raccourcir la longueur, vous pouvez stocker GroupUser.arel_table dans une variable ou en cas d'utilisation à l'intérieur du modèle GroupUser lui-même par exemple, en scope, vous pouvez utiliser arel_table[:user_id] au lieu de GroupUser.arel_table[:user_id]

Rails 4.0 syntaxe de crédit à @jbearden réponse

38voto

jbearden Points 899

Rails 4

26voto

Jakub Hampl Points 19161

La seule façon vous pouvez obtenir de plus sophistiqué est avec MetaWhere.

MetaWhere a une nouvelle cousine qui s'appelle Squeel qui permet au code comme ceci:

GroupUser.where{user_id != me}

Il va sans dire, que si c'est le seul refactoriser vous allez faire, il n'est pas utile d'utiliser un bijou et je voudrais simplement coller avec ce que vous avez. Squeel est utile dans les situations où vous avez beaucoup de requêtes complexes en interaction avec code Ruby.

21voto

Rick Smith Points 1066

Rails de 4 :

Si vous souhaitez utiliser à la fois pas égal et égal, la notation suivante fonctionne très bien :

15voto

Spyros Points 13741

Ce que vous avez est assez bien un bon moyen de le faire je pense que 3 Rails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X