Muitas vezes durante o desenvolvimento de uma aplicação vamos realizar algumas queries e o Active Record não supre as necessidades, pois, à medida que o sistema cresce, a complexidade de algumas ações também aumenta.
Além disso, algumas queries como LIKE
não estão disponíveis por padrão no Active Record. Para isso, usamos String Conditions:
books = Book.where(‘title LIKE ?’, q)
Mas, se queremos fazer a mesma Query em muitos campos do nosso objeto, essa sintaxe não fica tão legível.
books = Book.where(‘title LIKE ? OR category LIKE ? OR subtitle LIKE ?’, q, q, q)
Os Placeholder Conditions vêm pra nos ajudar a tornar essa Query mais compreensível:
books = Book.where(‘title LIKE :word OR category LIKE :word OR subtitle LIKE :word’,word: q)
Com eles, passamos parâmetros como um Hash. Desta forma, podemos dar nomes para contextos que são iguais.
Claro que um conhecimento mais profundo de Active Record e Banco de Dados pode simplificar nossa Query. Por exemplo, em alguns bancos poderíamos usar CONCAT
para simplificar a chamada de OR
a muitas colunas.
Lembre-se também que o Active Record suporta o método
or
para múltiplas condições e quando usamos datas podemos usar oRange
do Ruby na condição.
books = Book.where(release_date: 2.days.ago.beginnig_of_day..5.days.from_now.end_of_day)