0

現在、カスタムメソッド(プロセス!)がトランザクションコントローラー内でfalseまたはtrueを返すたびにメッセージを表示しようとしています。ただし、falseごとに1回、trueごとに1回だけ返されます。以下は、コントローラーのコードです。

 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>

アプリケーションレイアウトで一度だけ言及しているので(1つはエラー用、もう1つは成功用)、1回だけ表示されると思います。メソッド「process!」によって返されるfalseごとにどのように表示するのでしょうか。

前もって感謝します。

4

1 に答える 1

0

1つしかないため、レイアウトには1つしか表示されませflash使用するかどうかに関係なく、キーごとに1つのメッセージを格納しますkeep

したがって、を設定するたびに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?
于 2012-11-18T01:02:04.967 に答える