我正在使用rails
和materialize toasts
来显示Flash消息。这是使用
<% unless flash.empty? %>
<script>
<% flash.each do |f| %>
<% type=f[0].to_s.gsub('alert', 'red').gsub('warning', 'deep-purple').gsub('success', 'green') %>
Materialize.toast('<%= f[1] %>', 4000, '<%= type %>')
<% end %>
</script>
<% end %>
问题在于split
flash messages
different toasts
single toast
代替flash
显示全部内容。如何在每个toast
显示每个create view combi as
select 'P' as type,
id,
prd_name as name,
prd_cat as parent_id
from product
union all
select 'C' as type,
id,
cat_name,
parent_cat
from category;
?
答案 0 :(得分:1)
闪烁在类型/值的散列中重新分组。我建议您创建一个帮助程序来包装闪存的演示文稿标签
flash的值很可能是单个字符串,或数组或字符串。我个人使用闪光灯包装器,让我可以将同样类型的闪光灯推送到同一类型
以下代码处理字符串或数组闪烁。请注意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
此包装器与框架无关,您可以根据需要定义single_flash
,并在布局中使用<%= flashes %>
。
对于您的材料实施,您有类似
的内容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
例如我的引导实现
# 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