На самом деле я не могу повлиять на местоположение флеш-сообщения, поскольку оно доставляется через CMS, и мои действия, связанные с игнорированием флеш-памяти на текущей странице, не сработали.
Так что я подумал, что попытаться передать переменную экземпляра на страницу показа другого контроллера. Я прочитал, что лучший способ справиться с этим - передать его помощнику.
Моя структура модели выглядит следующим образом:
Event
has_many :occupants
Occupant
belongs_to :event
Обрабатывается Occupant на странице показа событий с использованиемform_tag, который выглядит следующим образом:
=form_tag import_admin_occupants_path, multipart: true, class:'import' do
=hidden_field_tag 'event_id', @event.id
=file_field_tag :file, accept: 'text/csv', class: 'form-inline', required: true
=link_to 'Download template', root_path + 'import.csv', target: '_blank'
=submit_tag 'Import', class: 'btn btn-primary', id: 'csv-import', disabled: true
Я разрешаю импортировать CSV данных и выбрасывать ошибки вместе с тем, какие строки и сообщения об ошибках. Проблема в том, что все это работает вместе:
Row 1: Name can't be blank. City can't be blank. Row 3: Address can't be blank. Row 7: City can't be blank.
И я хотел бы разбить его на отдельные элементы строки / списка.
Контроллер Occupant выглядит следующим образом:
def import
@occupant = Occupant::Import.run(params[:file].path, params[:event_id]).result
if @occupant.empty?
flash[:notice] = 'Succes'
else
flash_helper(@occupant)
end
redirect_back(fallback_location: root_path)
end
Я обязательно включил в верхней части контроллера
include EventsHelper
Затем в EventsHelper:
def flash_helper(occupant)
occupant.to_a
end
Затем я столкнулся с проблемой в Event> Show
h1 Import Occupants
-flash_helper.each do |k,v|
=k
Это терпит неудачу с
неправильным числом аргументов (задано 0, ожидается 1)
Есть ли способ отобразить только этот помощниксо стороны импорта, как это кажется проблемой?
Я пробовал множество различных способов справиться с этим, как:
- flash [: error] = @occupant.to_a.join (»«) .Html_safe. Это показывает br в тексте
- flash [: error] = @ оккупант.to_a.join ('\ n'). Хотя технически он «показывает» новую строку, которую он на самом деле показывает только в текстовом элементе HTML, он все равно выглядит как объединенный во флэш-боксе.
- @occupant.each_with_index {| k, v |flash [: error] = k}. Это покажет только самую последнюю ошибку.
И так как я хочу, чтобы она оставалась на той же странице, я не могу сделать частичное в операторе else.
В конечном итоге я хочу просмотреть только ошибки посетителя на странице Событие> Показать с помощью помощника, так как я считаю, что это последний доступный вариант.