将一些命名范围添加到您的Target
模型中,以支持按年和月号查找。就像是:
class Target < ActiveRecord::Base
named_scope :by_month,
lambda { |month| { :conditions => ['MONTH(recorded_on) = ?',
month] }}
named_scope :by_year,
lambda { |year| { :conditions => ['YEAR(recorded_on) = ?', year] }}
.
.
.
end
(注意这里的条件是使用 MySQL 语法。)
假设您使用的是 RESTful 路由,请在文件中设置如下命名路由config/routes.rb
(确保在默认路由之前声明它):
map.targets_by_month '/targets/:year/:month', :controller => 'targets',
:requirements => { :year => /\d{4}/, :month => /\d{1,2}/ },
:conditions => { :method => :get }
—您可以像这样在视图中使用此路由:
<%= link_to 'Show April 2009 Targets', targets_by_month_path('2009', '04') %>
(请注意,月份的前导零是可选的,因为:requirements
上面定义的命名路由中的正则表达式)
最后,在您的 中TargetsController
,设置index
操作以使用之前定义的 named_scopes:
def index
@records = Target.by_year(params[:year]).by_month(params[:month])
.
.
.
end