Как я могу искать по диапазону дат в Rails? - PullRequest
0 голосов
/ 29 января 2011

Я написал функцию контроллера Rails, которая запрашивает базу данных MySQL, ища записи, которые были добавлены в определенный диапазон дат. Например, что-то вроде следующего:

    @foos = FooTableModel.where(created > ? AND created <= ?', DateTime.new(2011, 1, 26), DateTime.new(2011, 1, 29))

Этот запрос отлично подходит для моих целей. Однако я хотел бы разрешить пользователю устанавливать желаемый диапазон дат, а не устанавливать его явно. Я немного поэкспериментировал с файлами erb и получил большой успех при доступе к данным, меня интересует исключительно изменение данных , которые я запрашиваю для отображения.

Есть ли примеры, похожие на то, что я пытаюсь достичь? Я предполагаю, что это довольно распространенная вещь, которую разработчики Rails хотели бы разрешить своим пользователям, но мне не очень повезло с лидами.

1 Ответ

2 голосов
/ 29 января 2011

Где находится код вашей формы?

Вот стандартная форма REST:

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

Затем в вашем контроллере вы можете использовать параметры для поиска по этим датам.

start_date = params[:start_date]
end_date = params[:end_date]

Имейте в виду, foo_path должен быть спокойным маршрутом.Если это не так, вам нужно передать хеш {:controller => 'foo', :action => "find"}

В вашем контроллере вы можете сделать что-то вроде этого:

def index
   if params[:start_date] && params[:end_date]
       start_date = params[:start_date]
       end_date = params[:end_date]
       @foos = Foo.find(:all, :conditions => ['created_at BETWEEN ? AND ?,' start_date, end_date
   end
   responds_to do |format|
       format.html
   end  
end 
...