Techioz Blog

同じクエリ内でキャスト SQL とキー/値属性を組み合わせる方法

概要

これら 2 つの条件をクエリの同じ params マップに結合するにはどうすればよいでしょうか?

Post.where('created_at >= ?', 2.weeks.ago)
Post.where(:site_id => site_id)

今までは次のように構築してきました

Post
.where(:site_id => site_id)
.where('created_at >= ?', 2.weeks.ago)

でもこの状況を考えると、ちょっと行き詰まってしまった

# With the addition being the sql casting query
params = {:site_id => site_id}
Post.where(params)

これをどうやって行うのか、実際には何と呼んでいいのかわかりません。何か助けはありますか?

レール 7.0 ルビー 3.2.2

解決策

Post
  .where(:site_id => site_id)
  .where('created_at >= ?', 2.weeks.ago)

翻訳すると

params = { site_id: site_id, created_at: (2.weeks.ago..) }
Post.where(params)

日付条件に無限の範囲を使用することで、Ruby on Rails は同等の SQL 条件に変換できます。