Добавьте несколько именованных областей в модель 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 }
& ndash; Вы можете использовать этот маршрут в своем представлении следующим образом:
<%= link_to 'Show April 2009 Targets', targets_by_month_path('2009', '04') %>
(обратите внимание, что начальный ноль для месяца является необязательным из-за регулярного выражения :requirements
в названном маршруте, определенном выше)
Наконец, в вашем TargetsController
установите действие index
, чтобы использовать именованные_области, определенные ранее:
def index
@records = Target.by_year(params[:year]).by_month(params[:month])
.
.
.
end