Rails Flash Message и частичное отображение на соответствующей странице - PullRequest
0 голосов
/ 11 октября 2019

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, он перенаправляет на пользователя / импорт и отображает ошибки. Как сохранить этот фрагмент на странице шоу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...