TrainingEvent has_many Оккупанты. Оккупанты отображаются, добавляются, редактируются и т. Д. На шоу TrainingEvent. Я хочу показать все на странице TrainingEvent Show. В настоящее время мое действие импорта толкает его на другой маршрут, что может быть проблемой.
Мои маршруты имеют:
resources :occupants, except: [:index] do
collection {post :import }
end
Таким образом, представление буквально TrainingEvent> Show with Occupant Form. Что-то вроде:
h1 TrainingEvent
dt Name:
dd #{@training_event.name}
...
h1 Occupants
-if @training_event.occupants.count.zero?
Training is Empty
-else
tbody
-@training_event.occupants.each do |occupant|
td #{occupant.full_name}
...
=link_to 'Add Occupant', new_occupant_path(occupant: {training_event_id: @training_event.id})
= render partial: 'shared/list'
В верхней части находится обработчик вспышки (не то, что я могу взять), который используется для отображения всех вспышек с контроллеров. Таким образом, если TrainingEvent был сохранен, он мигает успешно. Если пользователь был добавлен, значит, он мигает успешно.
Что я пытаюсь сделать, если импорт был неудачным, вывести сообщение об ошибке, но в списке импорта отображаются все ошибки.
Так что-то вроде:
h1 Please see errors on your import
h1 TrainingEvent
...
...
Occupants
Table of People
- Row 3 Missing First Name
- Row 9 Email is invalid
Мой контроллер на данный момент имеет:
def import
@occupant = Occupant::Import.run(params[:file], params[:training_event_id]).result
if @occupant.empty?
flash[:notice] = 'Import successful'
else
flash[:error] = 'See errors on import below'
render partial: '/shared/list', locals: { occupant: @occupant}
end
end
Тогда в моем частичном я имею:
.alert
ul
-occupant.each do |type, msg|
-if type == 'error'
-msg.each do |a|
=content_tag :li, a, class: "flash_#{type}"
Это, однако, приводит к
неопределенная локальная переменная или метод `оккупант '
Я пытался обновить партиал на шоу, чтобы использовать пассажиры: @ training_event.occupants, но он передает действительный / текущийоккупанты.
Итак, я вернулся и обновил контроллер, чтобы иметь:
flash[:error] = "Error"
render partial: 'shared/list', object: @occupant
Затем в моем TrainingEvent> Show
- if flash[:error]
= render partial: 'shared/list'
А затем в моей части:
.alert
ul
-@occupant.each do |occo|
=content_tag :li, occo
Однако это не удается на странице Показать с
неопределенным методом `each '
Как я предполагаю, что if flash [:ошибка] не является допустимым условием для отображения этого сообщения. Теперь, если я удаляю частичку рендеринга в Show, он перенаправляет на пользователя / импорт и отображает ошибки. Как сохранить этот фрагмент на странице шоу?