我可以将方法应用于model.where条件以获取在特定月份创建的所有对象吗?

时间:2019-06-12 08:52:11

标签: ruby-on-rails datetime

我正在尝试在名为.where的我的模型上应用news函数,以获取特定月份的所有新闻published(represented by DateTime)

我试图使以下代码段起作用:

news.where(:publish_time.strftime('%B %Y') => "month year") 

但是似乎不支持这种调用,因为:publish_time是符号而不是值。

还有其他方法可以做到吗?还是应该创建一个包含发布月份和年份的列?

我发现其他来源声称您应该创建DateTime的跨度并检查对象是否在该跨度内。但是,那确实感觉极易干燥,并且无法添加。

2 个答案:

答案 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)