Flashes sind in einem Hash von Typ/Wert neu gruppiert. Ich schlage vor, dass Sie einen Helfer erstellen, um Ihre Präsentationstags für Blitze zu wickeln
Der Wert eines Flash könnte sehr gut eine einzelne Zeichenfolge oder ein Array oder Zeichenfolgen sein. Ich persönlich benutze einen Wrapper um Flash, der mich so viele Blitze wie ich möchte auf den gleichen Typ drücken kann
Der folgende Code behandelt Zeichenfolge oder Array blinkt. Beachten Sie die flash.each do |type, content|
def flashes
content_tag(:div, class: 'flash-group') do
flash.each do |type, content|
if content.respond_to?(:each)
# If you have an array of flashes, regroup them under the same "flash" block
concat(single_flash(type, flash) do
# The flash messages are added as a list
content_tag(:ul) do
content.flatten.each do |message|
msg = if message.respond_to?(:html_safe)
message.html_safe
else
msg
end
concat(content_tag(:li, msg))
end
end
end)
else
concat(single_flash(type, content.html_safe))
end
end
end
end
Dieser Wrapper irgendwie Rahmen unabhängig ist und Sie können single_flash
definieren, wie Sie wollen, und verwenden Sie nur <%= flashes %>
in Ihrem Layout.
Für Ihre materielle Implementierung würden Sie so etwas wie
def single_flash(type, content = nil)
type_class = case type
when 'alert'
'red'
when 'warning'
'deep-purple'
when 'success'
'green'
else
'?'
end
Materialize.toast(content, 4000, type_class)
end
Zum Beispiel meine Bootstrap-Implementierung
# Render a single flash, styles according to the flash type
def single_flash(type, content = nil)
alert_class = ['alert alert-dismissible media']
contextual_class = case type.to_sym
when :alert, :danger, :error, :fatal
'danger'
when :warning, :todo
'warning'
when :notice, :success
'success'
else
'info'
end
alert_class << "alert-#{contextual_class}"
close_class = "close text-#{contextual_class}"
content_tag(:div, class: alert_class, role: 'alert') do
concat(content_tag(:div, class: 'flash-icon media-left media-middle') do
font_awesome(case type.to_sym
when :fatal, :error
'exclamation-triangle'
when :danger, :warning
'exclamation-triangle'
when :success
'check'
when :notice, :info
'info-circle'
else
'question'
end)
end)
concat(content_tag(:div, class: 'flash-message media-body') do
block_given? ? yield : simple_format(content)
end)
concat(content_tag(:div, class: 'media-right media-middle') do
concat(content_tag(:button, class: close_class, 'data-dismiss': 'alert') do
concat(content_tag(:span, aria_hidden: true) {'×'.html_safe })
concat(content_tag(:span, class: 'sr-only') { 'Close' })
end)
end)
end
end
haben