循环中的Flash消息不会多次显示

时间:2012-11-18 00:55:31

标签: ruby-on-rails

我正在尝试在每次自定义方法(进程!)在我的事务控制器中返回false或true时显示一条消息。但是,它只返回一次,每次为假,每次为真。下面是控制器中的代码:

 def execute_all
@transaction = Transaction.find(:all)
#Execute all transactions
@transaction.each do |t|
        if (t.process!)
            #flash.keep[:noticeTransaction] = 'Transaction number: ' + t.id.to_s + ' executed Successfully!'
            else 
            flash.keep[:errorTransaction] = 'Transaction cannot be executed -> Transaction Id: ' + t.id.to_s
        end
        end
respond_to do |format|
      format.html { redirect_to transactions_url }
      format.json { head :no_content }
    end

以下是application.html.erb

中的代码
<html>
<head>

</head>
<body>
<p style="color:red" class="error"><%= flash[:errorTransaction] %></p>
<p style="color:green" ><%= flash[:noticeTransaction] %></p>

<%= yield %>

</body>

我假设因为我只在应用程序布局中提到过一次(一个用于错误,一个用于成功),它只显示一次。我想知道如何显示方法“process!”返回的每个错误。

提前致谢。

1 个答案:

答案 0 :(得分:0)

布局只显示一个,因为 只有一个。无论您是否使用flashkeep都会为每个密钥存储一条消息。

因此,每次设置flash.keep[:errorTransaction]时,您都会覆盖上一条消息,而不是追加另一条消息。

要解决此问题,您可以在迭代事务时存储所有消息,然后将它们一次性存储在flash上,例如:

messages = []
@transaction.each do |t|
  if (t.process!)
    messages << '<div class="some-class">your message in a wrapper</div>'
  end
end
flash.keep[:errorTransaction] = messages.join if messages.any?