Como você faz uma consulta OR no Rails 3 ActiveRecord. Todos os exemplos que encontro apenas têm consultas AND.
Edit: OR está disponível desde o Rails 5. Consulte ActiveRecord :: QueryMethods
ruby-on-rails
ruby-on-rails-3
rails-activerecord
pho3nixf1re
fonte
fonte
Post.where(column: 'something').or(Post.where(other: 'else'))
Respostas:
Use o ARel
O SQL resultante:
fonte
matches
, produziráLIKE
para sqlite (sem distinção entre maiúsculas e minúsculas por padrão) eILIKE
no postgres (precisa de explícita sem distinção entre maiúsculas e minúsculas como operador).Se você deseja usar um operador OR no valor de uma coluna, pode passar uma matriz para
.where
e o ActiveRecord usaráIN(value,other_value)
:saídas:
Isso deve atingir o equivalente a um
OR
em uma única colunafonte
no Rails 3, deve ser
Isso também inclui sql bruto, mas eu não acho que exista uma maneira no ActiveRecord de fazer a operação OR. Sua pergunta não é uma pergunta noob.
fonte
Page.where("pages.column = ? or pages.other_column = ?", value, other_value)
Uma versão atualizada do Rails / ActiveRecord pode suportar essa sintaxe nativamente. Seria semelhante a:
Conforme observado nesta solicitação de recebimento https://github.com/rails/rails/pull/9052
Por enquanto, basta seguir os seguintes procedimentos:
Atualização: de acordo com https://github.com/rails/rails/pull/16052, o
or
recurso estará disponível no Rails 5Atualização: o recurso foi mesclado à ramificação do Rails 5
fonte
or
está disponível agora no Rails 5, mas não implementado dessa maneira, pois espera que 1 argumento seja passado. Ele espera um objeto Arel. Veja a resposta aceitaor
método no ActiveRecord funciona se você o estiver usando diretamente: mas pode quebrar suas expectativas se for usado em um escopo que é encadeado.O Rails adicionou recentemente isso ao ActiveRecord. Parece ser lançado no Rails 5. Comprometido em dominar já:
https://github.com/rails/rails/commit/9e42cf019f2417473e7dcbfcb885709fa2709f89
fonte
O Rails 5 vem com um
or
método. (l tinta na documentação )Este método aceita um
ActiveRecord::Relation
objeto. por exemplo:fonte
Se você deseja usar matrizes como argumentos, o código a seguir funciona no Rails 4:
Mais informações: OU consulta com matrizes como argumentos no Rails 4 .
fonte
Order.where(query.where_values.inject(:or))
usar arel até o fim.O plugin MetaWhere é completamente incrível.
Misture facilmente ORs e ANDs, junte condições em qualquer associação e até especifique OUTER JOIN's!
fonte
Basta adicionar um OR nas condições
fonte
Acabei de extrair esse plug - in do trabalho do cliente que permite combinar escopos com
.or.
ex.Post.published.or.authored_by(current_user)
. Squeel (implementação mais recente do MetaSearch) também é ótimo, mas não permite escopos OR, portanto a lógica da consulta pode ser um pouco redundante.fonte
Com trilhos + arel, uma maneira mais clara:
Produz:
fonte
Você poderia fazê-lo como:
ou mais elegante, instale rails_or gem e faça o seguinte:
fonte
Gostaria de acrescentar que esta é uma solução para pesquisar vários atributos de um ActiveRecord. Desde a
irá procurar por A e B.
fonte
fonte