Вспомогательный метод Rails Display, содержащий переменную экземпляра на отдельном шоу контроллера - PullRequest
0 голосов
/ 01 ноября 2019

На самом деле я не могу повлиять на местоположение флеш-сообщения, поскольку оно доставляется через 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.

В конечном итоге я хочу просмотреть только ошибки посетителя на странице Событие> Показать с помощью помощника, так как я считаю, что это последний доступный вариант.

1 Ответ

0 голосов
/ 02 ноября 2019

Этот вспомогательный метод получает только значение оккупанта и вызывает to_a для него, он не хранит ничего для последующего использования.

Если вы хотите, чтобы ошибки отображались в разных строках, используйте HTMLТег BR, показывающий разрыв строки:

flash[:error] = @occupant.to_a.join('<br />').html_safe

Я не уверен, что понимаю поток запросов / страниц из вашего описания.

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