按年过滤记录

rma*_*002 1 ruby-on-rails ruby-on-rails-3.2

需要使用created_at字段按年过滤文章.

我在这样的文章中获得了多年的链接:

文章助手:

  def artcles_by_years
    Article.uniq.pluck("EXTRACT(YEAR FROM created_at)")
  end
Run Code Online (Sandbox Code Playgroud)

index.html.erb

  <% for art in artcles_by_years do %>
    <%= link_to art %>
  <% end %>
Run Code Online (Sandbox Code Playgroud)

它显示:2009 2010 2011 2012,当然,非工作链接.

题:

如何在控制器中构建工作链接和查询以按年过滤文章,例如按2009并返回2009年创建的所有文章.谢谢.

sid*_*ick 6

您可以向模型添加范围

scope :year, lambda{|year|
  where(" EXTRACT(YEAR FROM created_at) = ? ", year ) if year.present?  
}
Run Code Online (Sandbox Code Playgroud)

并使用控制器中的范围:

@articles = Article.year(params[:year])
Run Code Online (Sandbox Code Playgroud)

显示链接:

<%= link_to art, articles_path( :year => atr) %>
Run Code Online (Sandbox Code Playgroud)