繁体   English   中英

如何呈现多个即插即用消息?

[英]How can I render more than one flash message?

在我的应用程序中,我有时会生成不只一个Flash消息。 我的application_helper.rb中有以下方法

  def flash_message
    flash.each do |key, msg|
      return render "admin/shared/#{key}", msg: msg 
    end
  end

但是,当我初始化我的控制器中的几闪的消息,那只能说明第一。 有任何想法吗?

编辑:

而在我的布局我做这样的事情

- unless flash.empty?
   = flash_message

根据您的代码,它将仅返回第一个列表。

我认为最好这样做

使用视图:

- Ruby Code in View 
%ul#error-msg-list
  flash.each do |key, msg|
    %li.error-message= "<!-- your html --> admin/shared/#{key}" 
  end

否则,您可以将所有闪存消息存储在另一个阵列中。并在控制器级别上执行逻辑,但这是不必要的内存成本。

您的函数将在第一次调用return

我想你的目标是...

  def flash_message
    result = ''
    flash.each do |key, msg|
      result += render("admin/shared/#{key}", msg: msg) 
    end
    result
  end

但是,如果我没记错的话,您还需要传递参数以进行不同的render 尝试:

render(partial: "admin/shared/#{key}", locals: { msg: msg })

结合在一起的版本,具有使用mapjoin的功能性扭曲,如下所示:

  def flash_message
    flash.map do |key, msg|
      render(partial: "admin/shared/#{key}", locals: { msg: msg })
    end.join('')
  end

编辑:

这是一个例子。 如果您的flash看起来像这样:

flash = {notice: 'Everything find.', error: 'Ups, my bad: Error'}

这段代码

flash.map { |key, str| "<div class='#{key}'>#{str}</div>" }.join('')

会给你这个

"<div class='notice'>Everything find.</div><div class='error'>Ups, my bad: Error</div>"

如果这只是一个呈现提示信息,我认为只有一个在消息flash 也许您在设置第一个时覆盖了第一个?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM