Я думал каждый раз, когда Вы делаете a flash[:notice]="Message"
это добавило бы его к массиву, который затем отобразить во время представления, но следующее просто сохраняет последнюю флэш-память:
flash[:notice] = "Message 1"
flash[:notice] = "Message 2"
Теперь я понимаю, что это - просто простой хеш с ключом (я думаю :)) но есть ли лучший способ сделать несколько вспышек, чем следующее:
flash[:notice] = "Message 1<br />"
flash[:notice] << "Message 2"
Сообщение flash
действительно может быть чем угодно, поэтому вы можете сделать что-то вроде этого:
flash[:notice] = ["Message 1"]
flash[:notice] << "Message 2"
А затем в ваших представлениях выведите это как
<%= flash[:notice].join("<br>") %>
или как хотите.
Будет ли этот метод проще , чем другие решения, определяется вашими собственными предпочтениями.
Я обычно добавляю такие методы в 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 %>