Генерация отчета диапазона дат в направляющих

Я получаю исключение нулевого указателя и полагаю, что из-за множественных запросов

Я думаю, что ваше предположение неверно.

[Из комментариев: ноль] этой строки for (String sku : genericMockingForm.getSkus()) {

Это, кажется, указывает на то, что genericMockingForm.getSkus() возвращает null, так как единственный другой объект, используемый там genericMockingForm, что проверено выше.

Вы должны поставить ту же самую нулевую проверку в этом тесте формы:

 if (!Objects.isNull(genericMockingForm.getSkus())) ...

Если они оба null, вы должны выпустить какую-то ошибку использования.

22
задан srboisvert 26 September 2008 в 13:12
поделиться

2 ответа

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

Виджеты Выбора Даты

1) Решение для направляющих По умолчанию: См. date_select документация здесь .

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

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

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

1) Решение для направляющих По умолчанию См. date_select документация здесь .

#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] будет инициализирован направляющими для Вас.

#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
32
ответ дан 29 November 2019 в 05:07
поделиться

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

  #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 %>
2
ответ дан 29 November 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: