Rails - фильтр по диапазону дат - PullRequest
1 голос
/ 16 февраля 2012

Попытка создать фильтр позволяет найти расписания с выделенными курсами в заданном диапазоне дат:

AdminController:

def find_schedules
  if params[:start_date] && params[:end_date]
   start_date = params[:start_date]
   end_date = params[:end_date]
   @schedules = Schedule.find(:all, :conditions => {:coursedate => start_date..end_date})
  redirect_to :action => 'find_results'  
  end
end

представление find_schedules:

<% form_tag(find_schedules_path) do %>
<%= select_date Date.today, :prefix => :start_date %>
<%= select_date Date.today, :prefix => :end_date %>>
<%= submit_tag "Submit", :disable_with => "Submitting..." %>
<% end %>

Ошибка:

    Processing AdminController#find_schedules (for ...) [POST]
  Parameters: {"start_date"=>{"month"=>"3", "day"=>"23", "year"=>"2011"}, "commit"=>"Submit", "authenticity_token"=>"...", "end_date"=>{"month"=>"2", "day"=>"16", "year"=>"2012"}}

ArgumentError (bad value for range)

Кажется, у меня всегда проблемы с датой / датой и временем.coursedate - это поле даты и времени в таблице расписаний, если это имеет значение.Мне нужно только искать даты, а не раз.Нужно ли как-то преобразовывать тип данных из-за того, как MySQL хранит его?Или ... что еще я делаю не так?Заранее благодарю за помощь.

Становясь намного ближе после помощи bdon, спасибо!Теперь я получаю неопределенную ошибку метода, но я должен быть в состоянии понять это:

ActionView::TemplateError (undefined method `each' for nil:NilClass) on line #26 of /admin/find_results.html.erb:       
25: <tr class="<%= cycle('odd', 'even') %>">
26: <% @schedules.each do |schedule| %>

1 Ответ

1 голос
/ 17 февраля 2012

Вы получаете эту ошибку, потому что функция «range» не поддерживает хэши, которые передаются в этом случае:

1.9.3-p0 :008 > {:year => 2012, :month => 11, :day => 1}..{:year => 2012, :month => 12, :day => 1}
ArgumentError: bad value for range

Вместо этого вам нужно сделать начало и конец диапазонабыть объектами DateTime:

1.9.3-p0 :010 > DateTime.new(2012,11,1)..DateTime.new(2012,12,1)
=> Thu, 01 Nov 2012 00:00:00 +0000..Sat, 01 Dec 2012 00:00:00 +0000 

То есть

start_params = params[:start_date]
start_date = DateTime.new(start_params["year"].to_i, start_params["month"].to_i, start_params["day"].to_i)

То же самое для end_date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...