使用活动记录按月和日查找记录,忽略年份和时间
我有一个模型(参赛作品),有五年的记录(每天一个记录)。 我需要一个方法,当传递一个日期对象,如2011-12-25 00:00:00
,将显示所有在12月25日发生的记录(查询:created_at
列),无论年份如何或时间过去了。
RoR 3.0.9 / Ruby 1.9.2p290
您可以使用mysql的MONTH和DAY值。 也许是这样的:
Model.where("MONTH(created_at) = ? and DAY(created_at) = ?", somedate.month, somedate.day)
适用于大多数SQL数据库的一般解决方案(包括MySQL和PostgreSQL):
Entry.where('extract(month from created_at) = ? AND extract(day from created_at) = ?', d.month, d.day)
SQLite不理解extract
但你必须使用:
Entry.where("strftime('%m/%d', created_at) = ?", d.strftime('%m/%d'))
假设您使用的是mysql:
User.where(["DAY(created_at) = ? AND MONTH(created_at) = ?", date.day, date.month])
假设RDBMS是MySQL并且你有使用combobox的表单来选择month和/或date_of_months,可能你可以创建一个named_scope,例如:
scope :by_date_or_month, lambda { |date, month| {:conditions => ["DAYOFMONTH(created_at) = ? or MONTH(created_at) = ?", date, month]}}
IRB测试:
Model.by_date_or_month(31,8) Model.by_date_or_month(nil,8)