C'est une question embarrassante, mais ...
Comment faites-vous une requête OR dans Rails 3 ActiveRecord. Tous les exemples que je trouve ne contiennent que des requêtes AND.
Edit: sans utiliser de chaîne SQL!
C'est une question embarrassante, mais ...
Comment faites-vous une requête OR dans Rails 3 ActiveRecord. Tous les exemples que je trouve ne contiennent que des requêtes AND.
Edit: sans utiliser de chaîne SQL!
Si vous souhaitez utiliser un opérateur OR sur la valeur d'une colonne, vous pouvez passer un tableau à .where
et ActiveRecord à utiliser IN(value,other_value)
:
Model.where(:column => ["value", "other_value"]
les sorties:
SELECT `table_name`.* FROM `table_name` WHERE `table_name`.`column` IN ('value', 'other_value')
Cela devrait atteindre l'équivalent d'un OR
sur une seule colonne
Utilisez ARel
t = Post.arel_table
results = Post.where(
t[:author].eq("Someone").
or(t[:title].matches("%something%"))
)
Le SQL résultant:
ree-1.8.7-2010.02 > puts Post.where(t[:author].eq("Someone").or(t[:title].matches("%something%"))).to_sql
SELECT "posts".* FROM "posts" WHERE (("posts"."author" = 'Someone' OR "posts"."title" LIKE '%something%'))
Si vous voulez utiliser des tableaux comme arguments, le code suivant fonctionne dans Rails 4:
query = Order.where(uuid: uuids, id: ids)
Order.where(query.where_values.map(&:to_sql).join(" OR "))
#=> Order Load (0.7ms) SELECT "orders".* FROM "orders" WHERE ("orders"."uuid" IN ('5459eed8350e1b472bfee48375034103', '21313213jkads', '43ujrefdk2384us') OR "orders"."id" IN (2, 3, 4))
Plus d'informations: OU interroge avec des tableaux comme arguments dans Rails 4 .
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.