Rails3今年有记录

时间:2012-05-24 01:53:01

标签: ruby-on-rails-3 date where

在Rails3中,如何检索具有今年日期的所有记录? 我想要检索我所有的"项目" " date"是今年。

我怀疑它会类似于:

@projects_this_year = Project.where(:date.Time.year == Time.now.year)
or
@projects_this_year = Project.where(:date >= ?, Time.now.year)

我正在阅读文档,但还没有完全理解这一点。

2 个答案:

答案 0 :(得分:3)

你可以做这样的事情(假设有一个MySQL数据库):

@projects_this_year = Project.where("year(date) = ?", Time.now.year)

或更好:

@projects_this_year = Project.where("year(date) = year(utc_timetamp())")

不需要加载时间库。

供参考:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

修改


如果您希望它与数据库无关,那么您可以执行以下操作:

@projects_this_year = Project.where("date >= ?", Time.now.at_beginning_of_year)

答案 1 :(得分:0)

如果您经常需要特定的月份或年份,或者通过扩展@ David的答案,通过params,您也可以在模型中实现这种动态:

def self.get_year(date)
    # sanitize if params
    safe = ['2011', '2012', '2013']
    if safe.include?(date)
         where("year(created_at) = ?", Time.parse("#{date}-01-01 11:11:11 -0500").year)
    else
         scoped
    end
end

EX:

Product.get_year('2012')

注意要使其在heroku上运行,请更改以下内容:

where("date_part('year', created_at) = ?", Time.parse("#{date}-01-01 11:11:11 -0500").year

http://www.java2s.com/Code/PostgreSQL/Date-Timezone/datepartyeardate.htm