2012-11-18 83 views
0

我目前正試圖在每次自定義方法(process!)在我的事務控制器中返回false或true時顯示消息。但是,每一次錯誤只返回一次,每一次錯誤只返回一次。下面是在控制器代碼:循環中的Flash消息將不會顯示多次

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!」方法返回的每個false。

在此先感謝。

回答

0

佈局顯示只有一個,因爲只有一個。無論您是否使用keepflash每個密鑰都會存儲一條消息。

因此,每次您設置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? 
+0

有道理和陣列工作。謝謝! – Alex