Ainsi, dans Rails 4) la longue fonctionnalité souhaitée pour utiliser not
requêtes a été ajoutée.
Article.where.not(title: 'Rails 3')
Un support similaire a-t-il été ajouté pour les requêtes or
ou envisage-t-il de le créer? Je n'ai rien trouvé en parcourant les notes de publication.
Évidemment j'ai essayé
Article.where(title: 'Rails 3').or(title: 'Rails 4')
Mais ça ne marche pas.
Article.where(title: ['Rails 3', 'Rails 4'])
est ce que vous feriez dans Active Record.
Il n'est pas possible de répliquer une requête SQL arbitraire à l'aide de la syntaxe "Rails-y". Mais vous pouvez toujours simplement passer en sql littéral.
Donc vous pouvez aussi faire:
Article.where("articles.title = 'Rails 3' OR articles.title = 'Rails 4'")
Cela fonctionne maintenant dans Rails 5:
Article.where(title: 'Rails 3').or(Article.where(title: 'Rails 4'))
L'alternative la plus courante consiste déjà à répondre par @gregates
Récemment, il y a eu une demande d'extraction dans Rails source
Ajouter #any_of
méthode d’interrogation vers active_record Ce qui ajoute ou fonctionnalité à activerecord
le contributeur a déjà créé une gemme alors que ce n'est pas accepté
son Rails 3.2 et 4 compatibles
https://github.com/oelmekki/activerecord_any_of
Je n'ai pas encore essayé, mais je souhaite bientôt l'utiliser.
Je sais qu'il s'agit d'un vieux fil de discussion, mais toute autre personne à la recherche d'une solution à ce problème pourrait trouver ce code utile:
Article.where(title: ["Rails 3", "Rails 4"])
Cela vous aidera peut-être à engager quelqu'un dans la bonne direction sans avoir à risquer une injection SQL.
Il semble que la Rails branche principale supporte maintenant les OR requêtes. https://github.com/Rails/ rails/pull/16052
Je suppose que ce sera dans le cadre de la prochaine version majeure.
Rails 5 le supportera mais vous pouvez utiliser ce backport pour Rails 4.2: https://github.com/Eric-Guo/where-or
Vous pouvez utiliser Squeel pour les requêtes plus complexes:
Article.where{(title == 'Rails 3') | (title == 'Rails 4')}
Cela se traduit par la requête SQL suivante:
SELECT `articles`.* FROM `articles` WHERE ((`articles`.`title` = 'Rails 3' OR `articles`.`title` = 'Rails 4'))