¿Cómo se hace una consulta OR en Rails 3 ActiveRecord? Todos los ejemplos que encuentro solo tienen consultas AND.
Editar: el método OR está disponible desde Rails 5. Ver ActiveRecord :: QueryMethods
ruby-on-rails
ruby-on-rails-3
rails-activerecord
pho3nixf1re
fuente
fuente
Post.where(column: 'something').or(Post.where(other: 'else'))
Respuestas:
Use ARel
El SQL resultante:
fuente
matches
, produciráLIKE
para sqlite (mayúsculas y minúsculas por defecto) yILIKE
en postgres (necesita mayúsculas y minúsculas explícitas como operador).Si desea usar un operador OR en el valor de una columna, puede pasar una matriz a
.where
y ActiveRecord usaráIN(value,other_value)
:salidas:
Esto debería lograr el equivalente de un
OR
en una sola columnafuente
en Rails 3, debería ser
Esto también incluye SQL sin procesar, pero no creo que haya una forma en ActiveRecord para hacer la operación OR. Tu pregunta no es una pregunta novata.
fuente
Page.where("pages.column = ? or pages.other_column = ?", value, other_value)
Una versión actualizada de Rails / ActiveRecord puede admitir esta sintaxis de forma nativa. Se vería similar a:
Como se señaló en esta solicitud de extracción https://github.com/rails/rails/pull/9052
Por ahora, simplemente seguir con lo siguiente funciona muy bien:
Actualización: según https://github.com/rails/rails/pull/16052, la
or
función estará disponible en Rails 5Actualización: la característica se ha fusionado con la rama Rails 5
fuente
or
está disponible ahora Rails 5 pero no se implementa de esta manera porque espera que se pase 1 argumento. Espera un objeto Arel. Ver la respuesta aceptadaor
método en ActiveRecord funciona si lo está usando directamente: pero puede romper sus expectativas si se usa en un ámbito que luego se encadena.Rails ha agregado esto recientemente a ActiveRecord. Parece que se lanzará en Rails 5. Comprometido a dominar ya:
https://github.com/rails/rails/commit/9e42cf019f2417473e7dcbfcb885709fa2709f89
fuente
Rails 5 viene con un
or
método. (l tinta a la documentación )Este método acepta un
ActiveRecord::Relation
objeto. p.ej:fuente
Si desea utilizar matrices como argumentos, el siguiente código funciona en Rails 4:
Más información: O consultas con matrices como argumentos en Rails 4 .
fuente
Order.where(query.where_values.inject(:or))
usar arel todo el tiempo.El complemento MetaWhere es completamente sorprendente.
¡Mezcle fácilmente OR y AND, unir condiciones en cualquier asociación e incluso especificar OUTER JOIN!
fuente
Simplemente agregue un OR en las condiciones
fuente
Acabo de extraer este complemento del trabajo del cliente que le permite combinar ámbitos con
.or.
, por ejemplo.Post.published.or.authored_by(current_user)
. Squeel (la implementación más reciente de MetaSearch) también es excelente, pero no le permite O los ámbitos, por lo que la lógica de consulta puede ser un poco redundante.fuente
Con rails + arel, una forma más clara:
Produce:
fuente
Podrías hacerlo como:
o más elegante, instala rails_or gem y hazlo como:
fuente
Me gustaría agregar que esta es una solución para buscar múltiples atributos de un ActiveRecord. Ya que
buscará A y B.
fuente
fuente