Как указать условие меньше сегодняшнего дня в активной записи рельсов - PullRequest
35 голосов
/ 10 декабря 2011

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

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

Заранее спасибо за помощь

Ответы [ 2 ]

50 голосов
/ 10 декабря 2011

Попробуйте это:

@announcements = Announcement.where("publish = ? AND expires < ?", true, Date.today)
26 голосов
/ 03 февраля 2016

Так как в 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, т.е. @announcements

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...