Ada*_*dam 37 activerecord if-statement ruby-on-rails
我正在试图找出如何拉出我的集合中的所有记录,其中"发布"字段为真,"过期"小于今天.我有以下但我不认为不到一部分是工作,有人可以指出我在正确的轨道上?
@announcements = Announcement.where(:publish => true, :expires < Date.today)
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助
leo*_*ges 52
试试这个:
@announcements = Announcement.where("publish = ? AND expires < ?", true, Date.today)
Run Code Online (Sandbox Code Playgroud)
wyc*_*ean 27
由于这首先出现在谷歌上,我以为我会参与其中.在这种情况下依赖Arel可能更好.
expires = Announcement.arel_table[:expires]
@announcements = Announcement.where(:publish => true)
.where(expires.lt(Date.today))
Run Code Online (Sandbox Code Playgroud)
这将构建以下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')
Run Code Online (Sandbox Code Playgroud)
列名是完全限定的,因此在组成此ActiveRecord :: Relation之上的其他查询时,您将避免冲突,即 @announcements
在其他答案几年后发布此内容,但在我看来,这是最简洁的方法:
Announcement.where(publish: true, expires: ...Date.today)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33735 次 |
最近记录: |