Подтвердить что ты не робот

Как указать меньшее текущее состояние на дату в активной записи rails

Я пытаюсь понять, как вытащить все записи в моем наборе, где их поля "публиковать" истинны, а "истекает" меньше, чем сегодня. У меня есть следующее, но я не думаю, что чем часть работает, может кто-то, пожалуйста, укажет мне на правильный путь?

  @announcements = Announcement.where(:publish => true, :expires < Date.today)

Заранее благодарим за помощь

4b9b3361

Ответ 1

Попробуйте следующее:

@announcements = Announcement.where("publish = ? AND expires < ?", true, Date.today)

Ответ 2

Так как это появляется сначала в google, я думал, что буду звонить. Вероятно, лучше полагаться на Ареля в этом случае.

expires = Announcement.arel_table[:expires]
@announcements = Announcement.where(:publish => true)
  .where(expires.lt(Date.today))

Это построит следующий SQL-запрос

-- 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')

Имена столбцов полностью квалифицированы, поэтому вы избегаете конфликтов при составлении других запросов поверх этого ActiveRecord:: Relation i.e @announcements