我正在尝试在名为.where
的我的模型上应用news
函数,以获取特定月份的所有新闻published(represented by DateTime)
。
我试图使以下代码段起作用:
news.where(:publish_time.strftime('%B %Y') => "month year")
但是似乎不支持这种调用,因为:publish_time
是符号而不是值。
还有其他方法可以做到吗?还是应该创建一个包含发布月份和年份的列?
我发现其他来源声称您应该创建DateTime
的跨度并检查对象是否在该跨度内。但是,那确实感觉极易干燥,并且无法添加。
答案 0 :(得分:3)
将此添加到您的新闻模型中:
scope :published_in_month, ->(datetime) { where(publish_time: datetime.beginning_of_month..datetime.end_of_month) }
那么您可以做:
News.published_in_month(some_datetime)
即:
News.published_in_month(Datetime.new(2019, 06, 01))
答案 1 :(得分:0)
您还可以使用by_star gem轻松查询Active Record中的日期/时间范围。
News.by_month(Date.today)