2013-03-04 12 views
5

フラッシュメッセージが2回表示され、Webリサーチではメッセージの表示とリダイレクトが原因です。私はそれがフラッシュメッセージが2度表示されています

guidelines_controller.rb

def update 
    @guideline = Guideline.find(params[:id]) 

    respond_to do |format| 
    if @guideline.update_attributes(params[:guideline]) 
     @guideline.update_attribute(:updated_by, current_user.id) 
     format.html { redirect_to @guideline, notice: 'Guideline was successfully updated.' } 
     format.json { head :no_content } 
    else 
     format.html { render action: "show" } 
     format.json { render json: @guideline.errors, status: :unprocessable_entity } 
    end 
    end 
end 

レイアウト/ application.htmlに行く必要がある場合、私はどこかにこれをソートするが、私はうまくいかないことができ、[]、[]またはフラッシュflash.now使用する必要があると思いますあなたがするために、このような何かを行うことができ.erb

<div class="container"> 

    <% flash.each do |type, message| %> 

     <div class="alert <%= flash_class type %>"> 
      <button class="close" data-dismiss="alert">x</button> 
      <%= message %> 
     </div> 
    <% end %> 
</div> 

application_helper.rb 

def flash_class(type) 
    case type 
    when :alert 
    "alert-error" 
    when :notice 
    "alert-success" 
    else 
    "" 
    end 
end 

guideline_controller.rb

def show 
    @guideline = Guideline.find(params[:id]) 
    if @guideline.updated_by 
    @updated = User.find(@guideline.updated_by).profile_name 
    end 

     if User.find(@guideline.user_id) 
    @created = User.find(@guideline.user_id).profile_name 
     end 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @guideline } 

    end 
    end 
+0

をレンダリング避けるには、 '<% end %>が' 'divの前にそこに呼び出すことを固定しようとフラッシュメッセージを表示します'。あなたのコントローラーコードに問題はありません。私はあなたが上記のように編集した 'flash.discard' – jvnill

+0

を使う必要はないと思いますが(同じ意味ですか?)、同じ問題が起こっています。 – tessad

+0

nope。ループの前にまずdivを閉じる必要があります。 – jvnill

答えて

1

コードのいくつかの行を保存し、一度だけメッセージを表示:

<%- if flash.any? %> 
    <%- flash.keys.each do |flash_key| %> 
    <%- next if flash_key.to_s == 'timedout' %> 
    <div class="alert-message <%= flash_key %>"> 
     <a class="close" data-dismiss="alert" href="#"> x</a> 
     <%= flash.discard(flash_key) %> 
    </div> 
    <%- end %> 
<%- end %> 

flash.discardを使用することで、二回

+0

ありがとうございます - 私は私のアプリケーションのレイアウト(上記のものではなく)に追加しました。今はまだ2回表示されていますが、ブートストラップ・スタイリン(そのうちの1つにのみあります)がありません...なぜそれが起こっているのでしょうか? – tessad

+0

フラッシュメッセージを破棄しても、フラッシュは2回表示されます。フラッシュメッセージを表示する前に<%= debug flash%>を入力して、フラッシュメッセージが重複していないかどうかを確認するにはどうすればよいですか?それが問題かもしれません。 – rorra

+0

どこに行くの? – tessad

関連する問題