2008-09-26 6 views
20

Как вы собираетесь создавать отчеты по выбранным вами диапазонам дат в приложении для рельсов? Каковы наилучшие выборщики диапазона даты?Создание отчета по диапазону дат в рельсах

Редактировать в ответ на patrick: Я ищу немного виджета и рекомендации по активной записи, но то, что мне действительно интересно, - это то, как спокойно отображать список ранжированных дат на основе выбранных пользователем дат.

ответ

30

Мы задаем здесь вопрос интерфейса (то есть вы хотите виджет) или вопрос ActiveRecord?

Дата Комплектование Виджеты

1) По умолчанию Rails Решение: См date_select документацию here.

2) Использование плагина: Зачем писать код? Мне лично нравится плагин CalendarDateSelect, используя пару присосок, когда мне нужен диапазон.

3) Адаптировать виджет Javascript в Rails: Это почти тривиальным интегрировать что-то вроде библиотеки Yahoo UI (YUI) Calendar, что все Javascript, чтобы Rails. С точки зрения Rails это просто еще один способ заполнить params[:start_date] и params[:end_date]. Календарь YUI имеет встроенную поддержку диапазонов.

Получение данных из виджетов

1) По умолчанию Rails Решение См date_select документацию here.

#an application helper method you'll find helpful 
#credit to http://blog.zerosum.org/2007/5/9/deconstructing-date_select 

# Reconstruct a date object from date_select helper form params 
def build_date_from_params(field_name, params) 
    Date.new(params["#{field_name.to_s}(1i)"].to_i, 
     params["#{field_name.to_s}(2i)"].to_i, 
     params["#{field_name.to_s}(3i)"].to_i) 
end 

#goes into view 
<%= date_select "report", "start_date", ... %> 
<%= date_select "report", "end_date", ... %>  

#goes into controller -- add your own error handling/defaults, please! 
report_start_date = build_date_from_params("start_date", params[:report]) 
report_end_date = build_date_from_params("end_date", params[:report])  

2) CalendarDateSelect: Скорее всего, аналогичные приведенным выше, только с сексуальнее видимой UI.

3) Адаптировать виджет Javascript: Обычно это означает, что в каком-либо элементе формы будет введена дата в виде строки. Отличная новость для вас, так как Date.parse - это серьезная магия. Парамы [: some_form_element_name] будут инициализированы Rails для вас.

#goes in controller. Please handle errors yourself -- Javascript != trusted input. 
report_start_date = Date.parse(params[:report_start_date]) 

Дать вызов ActiveRecord

легко, как пирог.

#initialize start_date and end_date up here, by pulling from params probably 
    @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?', 
    start_date, end_date]) 
    #do something with models 
+0

Немного как виджета и активной записи, но то, что я на самом деле интересно, о том, как restfully отобразить дату колебались список на основе выбранных пользователем дат. В частности, как лучше всего получить вход от пользователя в активную запись. – srboisvert 2008-09-26 11:48:32

2

Неправильная практика использования параметров URL-адресов для диапазона выбранных записей. В указательных действиях, вы можете делать то, что предложил Патрик и иметь это:

#initialize start_date and end_date up here, by pulling from params probably 
    @models = SomeModel.find(:all, :conditions => ['date >= ? and date <= ?', params[:start_date], params[:end_date]]) 

Затем в индексном, создать форму, которая лавирует на start_date = 2008-01-01 & end_date = 2008-12-31? к URL-адресу. Помните, что это пользовательский ввод, поэтому будьте осторожны с ним. Если положить его на экране в указательным действия, убедитесь, что сделать это следующим образом:

Showing records starting on 
<%= h start_date %> 
and ending on 
<%= h end_date %>