Étant donné que cela apparaît en premier sur Google, j'ai pensé que je devais intervenir. Il est probablement préférable de s'appuyer sur Arel dans ces circonstances.
expires = Announcement.arel_table[:expires]
@announcements = Announcement.where(:publish => true)
.where(expires.lt(Date.today))
Cela va construire la requête SQL suivante
-- Using Arel
SELECT "announcements".* FROM "announcements"
WHERE "announcements"."publish" = 't'
AND ("announcements"."expires" < '2016-02-03 18:41:26.454325')
-- Contrast that with the string binding method mentioned above
SELECT "announcements".* FROM "announcements"
WHERE (publish = 't' AND expires < '2016-02-03 18:41:26.454325')
Les noms de colonnes sont entièrement qualifiés, vous éviterez ainsi les conflits lors de la composition d'autres requêtes au-dessus de cet ActiveRecord::Relation, c'est-à-dire @announcements