метод выдает ошибку аргумента при втором вызове? - PullRequest
0 голосов
/ 18 августа 2010

У меня есть следующий метод, который извлекает все встречи между 2 датами:

    def self.search_app(start_date, end_date)
    if start_date
       start_date = Date.new(start_date['(1i)'].to_i, start_date['(2i)'].to_i, start_date['(3i)'].to_i)
       end_date = Date.new(end_date['(1i)'].to_i, end_date['(2i)'].to_i, end_date['(3i)'].to_i)
       find(:all, :conditions => {:date_of_appointment => (start_date)..(end_date) })
    else
      find(:all)
    end
  end

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

<div id="search">
<% form_tag doctor_appointments_path(@person), :method => "get" do %>
    <span> From </span>
    <%= date_select :start_date, :start_date %>
    <span> Until </span>
    <%= date_select :end_date, :end_date %>
    <%= submit_tag "Search", :name => nil %>
<% end %>
</div>

код контроллера:

def index
  @appointments = person.appointments.search_app(params[:start_date], params[:end_date])
end

метод отлично работает при первом вызове, но если я пытаюсь выполнить поиск снова, я получаю ошибку аргумента:

Invalid date

{"start_date"=>{"start_date(1i)"=>"2010",
 "start_date(2i)"=>"8",
 "start_date(3i)"=>"5"},
 "doctor_id"=>"1",
 "end_date"=>{"end_date(3i)"=>"17",
 "end_date(1i)"=>"2010",
 "end_date(2i)"=>"8"}}

каким-то образом он передает идентификатор доктора с помощью метода Date.new?

есть идеи, как я могу это исправить?

спасибо

1 Ответ

1 голос
/ 18 августа 2010
date_select :start_date, :start_date

сообщает rails, что есть объект @start_date, который будет доступен, и что атрибут .start_date будет предоставлен выбранной датой.

Возможно, было бы лучше использовать select_date к которому вы можете передать дату для использования, и вам понадобится префикс, чтобы различать даты начала и окончания.Например:

select_date Date.current, :prefix => 'start'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...