我有一个包含date_published的Post模型。我想在索引页面上显示链接以查看特定年份的所有帖子(有点像博客有几个月你可以查看的地方)
我能想到回归多年的唯一方法是迭代所有帖子并返回帖子落入的年份中的独特数组。但这似乎是一个漫长的过程。有没有人有更好的解决方案呢?也许只是创建新表更容易,所以Post belongs_to:year
有什么建议吗?
答案 0 :(得分:9)
您不必在Ruby代码中迭代所有这些内容。您可以将:group
选项与count
:
>> Post.count(:all, :group => "Year(date_published)")
=> [["2005", 5], ["2006", 231], ["2007", 810], ["2009", 3]]
然后从中构建链接。
答案 1 :(得分:4)
我会使用其中一种:
find_by_sql
以获得不同年份,使用数据库中提供的任何年份显示功能。可能会解决一个我希望你会拥有的指数; 或
Post.minimum(:date_published).year..Post.maximum(:date_published).year
我非常喜欢第二个,即使它没有说明一年可能没有帖子的可能性!
答案 2 :(得分:3)
使用日期时间字段的SQL搜索(在我的示例中,它是updated_at)
years = ActiveRecord::Base.connection.select_all("SELECT DISTINCT DATE_FORMAT(updated_at, '%Y') AS updated_at FROM posts ORDER BY updated_at DESC")
这将返回
形式的所有年份值[{"updated_at"=>"2009"}, {"updated_at"=>"2008"}, {"updated_at"=>"1979"}, {"updated_at"=>"1922"}]
years.each { |y| puts y['updated_at'] }
2009
2008
1979
1924