2017-02-26 10 views
0

私はrailsmaterialize toastsを使ってフラッシュメッセージを表示しています。ここでコードがレールごとに異なるトーストを表示

<% 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 %> 

を使用していますされている問題は、different toastsにこの文句を言わないsplitflash messagesではなく、すべてのsingle toast上に表示されていることです。それぞれflashを自分で表示するにはどうすればよいですかtoast

答えて

1

点滅はタイプ/値のハッシュで再グループ化されます。フラッシュのためにプレゼンテーションタグをラップするヘルパーを作成することをお勧めします。

フラッシュの値は、単一の文字列、配列または文字列にすることができます。私は個人的にフラッシュの周りのラッパーを使用して、同じ種類の点滅をたくさん押すことができます

次のコードでは、文字列または配列のフラッシュが処理されます。このラッパーはちょっと枠組みにとらわれないで、あなたが欲しいしかしsingle_flashを定義し、ちょうどあなたのレイアウトで<%= flashes %>を使用することができます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 

に注意してください。

あなたの材料の実装のためには、例えば、私のブートストラップの実装については

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 
関連する問題