2012-11-18 5 views
0

사용자 정의 방법 (프로세스!)이 트랜잭션 컨트롤러에서 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> 

난 단지 응용 프로그램 레이아웃에서 한 번 언급 이후 나는 가정의 코드 (입니다 : 아래는 컨트롤러의 코드는 하나는 오류 용이고 하나는 성공 용) 한 번만 표시됩니다. 방법 "프로세스!"반환 된 각 false 표시하려면 어떻게 것이라고 궁금합니다.

미리 감사드립니다.

답변

0

이므로 하나만 표시됩니다. flashkeep을 사용하는지 여부에 관계없이 키당 하나의 메시지를 저장합니다.

그래서 flash.keep[:errorTransaction]을 설정할 때마다 이전 메시지를 덮어 쓰고 다른 메시지를 추가하지 않습니다.

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

말이와 배열이 작동합니다

이 당신이 뭔가를 당신이 거래를 반복하는 것에 따라, 모든 메시지를 저장 한꺼번에 flash에 저장할 수를 해결합니다. 감사! – Alex

관련 문제