Ответ 1
Попробуйте следующее:
@announcements = Announcement.where("publish = ? AND expires < ?", true, Date.today)
Я пытаюсь понять, как вытащить все записи в моем наборе, где их поля "публиковать" истинны, а "истекает" меньше, чем сегодня. У меня есть следующее, но я не думаю, что чем часть работает, может кто-то, пожалуйста, укажет мне на правильный путь?
@announcements = Announcement.where(:publish => true, :expires < Date.today)
Заранее благодарим за помощь
Попробуйте следующее:
@announcements = Announcement.where("publish = ? AND expires < ?", true, Date.today)
Так как это появляется сначала в 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