11
votes

Y a-t-il un moyen d'inverser une requête ActiveRecord :: Relation?

Disons que nous avons ce qui suit: xxx

Pourrions-nous avoir une requête SQL inversée de celle-ci?

Que je suis À la recherche de, devrait probablement ressembler à ceci: xxx


1 commentaires

Hmm. Bad Upvote sur le commentaire où (: caché => faux) par quelqu'un. Ce code pas générer le type de SQL L'OP recherche.


6 Réponses :


17
votes

avec une syntaxe différente, oui. Exemple: xxx


3 commentaires

Pas précisément ce que je cherchais mais toujours une très bonne réponse.


Avez-vous trouvé une autre façon de faire cela? Peut-être une meilleure syntaxe? La réponse a-t-elle fonctionné pour vous?


En fait, je pense que ce n'est même pas possible depuis ce que je demande réellement est d'inverser et d'activerecord :: objet de relation qui pourrait ou non avoir plusieurs jointures et inclut trop de choses qui compliqueraient trop la matière (laquelle devrait-on inverser et qui ne devrait-il pas être inverser et qui non?) . Je pense que je vais laisser cela ouvert jusqu'à ce qu'une réponse arrive.




0
votes

Ce que je fais quand je cherche des enregistrements avec une condition "non vraie" (par exemple, faux ou nil) est la suivante:

Post.where(["(hidden IS NULL) OR (hidden = ?)", false])


0 commentaires

6
votes

in rails 4 Il y a non suffixe à cet effet: xxx

dans rails 3 Vous pouvez utiliser Gem Squeel . Il donne de nombreuses fonctionnalités utiles. Et avec vous, vous pouvez écrire: xxx


0 commentaires

0
votes

Enfin, nous avons la méthode invert_where avec des rails 7. xxx

veuillez cocher cette COMMITE Référence pour plus de détails.


0 commentaires

1
votes

invert_where (rails 7 +)

À partir des rails 7, il y a une nouvelle invert_where méthode.

Selon les documents, il:

Vous permet d'inverser une liste entière où la clause au lieu d'appliquer manuellement des conditions. xxx

Soyez prudent parce que cela inverse toutes les conditions avant invert_where appel. xxx

sources:


1 commentaires

Il, je viens de googler une solution pour un inverse où et vous avez répondu à cette solution hier. Une autre raison de passer aux rails 7 :)