为导轨

时间:2017-02-26 13:13:30

标签: ruby-on-rails ruby-on-rails-5 materialize

我正在使用railsmaterialize 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;

1 个答案:

答案 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) {'&times;'.html_safe })
          concat(content_tag(:span, class: 'sr-only') { 'Close' })
        end)
      end)
    end
  end