簡體   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