Come si fa una query or
in Rails 5 ActiveRecord? Inoltre, è possibile concatenare or
con where
nelle query di ActiveRecord?Rails 5: ActiveRecord OR query
risposta
La capacità di catena or
clausola insieme where
clausola ActiveRecord
interrogazione sarà disponibile in Rotaie 5. Vedi lo related discussion and the pull request.
Quindi, si sarà in grado di fare le seguenti cose in Rails 5:
Per ottenere un post
con id
1 o 2:
Post.where('id = 1').or(Post.where('id = 2'))
Alcuni altri esempi:
(A & & B) || C:
Post.where(a).where(b).or(Post.where(c))
(A || B) & & C:
Post.where(a).or(Post.where(b)).where(c)
Come posso ottenere (A || B) && (C || D). Ho provato Post.where (a) .or (Post.where (b)). Where (c) .or (Post.where (d)) ma produce come: (A || B) && C || D – Imran
@Imran credo che sarebbe 'Post.where (a) .or (Post.where (b)). Dove (Post.where (c) .or (Post.where (d)))' questo dovrebbe creare (a || b) && (c || d) – engineersmnky
avevo bisogno di fare un (A && B) || (C && D) || (E && F)
Ma allo stato attuale l' Rails 5.1.4
questo ottenere di troppo complicato da realizzare con l'Arel o catena. Ma volevo ancora usare Rails per generare quanta più query possibile.
Così ho fatto un piccolo trucco:
Nel mio modello ho creato un metodo privatochiamato sql_where
:
private
def self.sql_where(*args)
sql = self.unscoped.where(*args).to_sql
match = sql.match(/WHERE\s(.*)$/)
"(#{match[1]})"
end
successiva nel mio ambito ho creato un array per contenere del OR
scope :whatever, -> {
ors = []
ors << sql_where(A, B)
ors << sql_where(C, D)
ors << sql_where(E, F)
# Now just combine the stumps:
where(ors.join(' OR '))
}
Che produrrà il risultato della query prevista: SELECT * FROM `models` WHERE ((A AND B) OR (C AND D) OR (E AND F))
.
E ora posso facilmente combinare questo con altri ambiti ecc. Senza alcun OR errato.
La bellezza è che il mio sql_where accetta normali argomenti where-clause: sql_where(name: 'John', role: 'admin')
genererà (name = 'John' AND role = 'admin')
.
- 1. Convertire MySQL Query a Rails ActiveRecord query senza utilizzare find_by_sql
- 2. Rails 4, query non elaborata con ActiveRecord
- 3. activerecord non come query
- 4. Cosa significa [5.0] in ActiveRecord :: Migration di Rails 5?
- 5. Rails ActiveRecord tavolo multiplo include
- 6. Query activerecord Rails confrontando due attributi dello stesso record
- 7. Rails ActiveRecord: è una combinazione: include e: query condizioni possibili?
- 8. Ruby on Rails Query ActiveRecord utilizzando un join
- 9. Rails 3 DateTime Comparison w/Date In An ActiveRecord Query
- 10. Come esprimere una query NOT IN con ActiveRecord/Rails?
- 11. Rails ActiveRecord Perform Group, Somma e Conte in una query
- 12. ActiveRecord efficiente has_and_belongs_to_many query
- 13. Safe ActiveRecord come query
- 14. Upsert in Rails ActiveRecord
- 15. Rails ActiveRecord Model Linked List
- 16. UNIONE SQL con Rails ActiveRecord
- 17. Rails ActiveRecord Cerca con operatori logici
- 18. Rails ActiveRecord fuga variabile nella clausola join
- 19. Ruby on Rails ActiveRecord: pluralization
- 20. Rails 3 Condizionale ActiveRecord include?
- 21. rails ActiveRecord :: Observer nel plugin
- 22. Rails has_many ActiveRecord Association personalizzato
- 23. Campo temporale database Rails/Activerecord
- 24. Rails 3 - ActiveRecord e invertire sorta
- 25. Filtraggio delle query ActiveRecord nei binari
- 26. Rails 5 ignora la classe/lib?
- 27. restituire query personalizzata selezionare in activerecord
- 28. Attivare la query SQL in ActiveRecord Relazione
- 29. Impaginazione di una query di ActiveRecord mescolata
- 30. Rails: sovrascrivere il metodo di associazione ActiveRecord
[Potrebbe essere di aiuto] (http://stackoverflow.com/q/31096009/3444240) – potashin