Направляющие: Простой способ добавить больше чем одну флэш-память [: заметьте] за один раз

Я думал каждый раз, когда Вы делаете a flash[:notice]="Message" это добавило бы его к массиву, который затем отобразить во время представления, но следующее просто сохраняет последнюю флэш-память:

flash[:notice] = "Message 1"
flash[:notice] = "Message 2"

Теперь я понимаю, что это - просто простой хеш с ключом (я думаю :)) но есть ли лучший способ сделать несколько вспышек, чем следующее:

flash[:notice] = "Message 1<br />"
flash[:notice] << "Message 2"
36
задан Arslan Ali 27 September 2016 в 06:07
поделиться

2 ответа

Сообщение flash действительно может быть чем угодно, поэтому вы можете сделать что-то вроде этого:

flash[:notice] = ["Message 1"]
flash[:notice] << "Message 2"

А затем в ваших представлениях выведите это как

<%= flash[:notice].join("<br>") %>

или как хотите.

Будет ли этот метод проще , чем другие решения, определяется вашими собственными предпочтениями.

44
ответ дан 27 November 2019 в 05:19
поделиться

Я обычно добавляю такие методы в ApplicationHelper:

def flash_message(type, text)
    flash[type] ||= []
    flash[type] << text
end

И

def render_flash
  rendered = []
  flash.each do |type, messages|
    messages.each do |m|
      rendered << render(:partial => 'partials/flash', :locals => {:type => type, :message => m}) unless m.blank?
    end
  end
  rendered.join('<br/>')
end

И после этого их очень легко использовать:

Вы можете написать что-то вроде:

flash_message :notice, 'text1'
flash_message :notice, 'text2'
flash_message :error, 'text3'

в вашем контроллере.

И просто добавьте эту строку в свой layout:

<%= render_flash %>
55
ответ дан 27 November 2019 в 05:19
поделиться
Другие вопросы по тегам:

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