Мы задаем здесь вопрос интерфейса (то есть вы хотите виджет) или вопрос 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
Немного как виджета и активной записи, но то, что я на самом деле интересно, о том, как restfully отобразить дату колебались список на основе выбранных пользователем дат. В частности, как лучше всего получить вход от пользователя в активную запись. – srboisvert 2008-09-26 11:48:32