2011-03-03 5 views
2

플래시 메시지를 표시하고 Ajax로 렌더링하려하지만 페이지를 새로 고침 할 때까지 메시지가 으로 표시되지 않는 것 같습니다. 여기에 내 응용 프로그램 레이아웃 뷰의 관련 부분레일상의 루비에서 Ajax 플래시 메시지

page.insert_html :top, :feed_items, :partial => 'shared/feed_item', :object => @micropost 
page.replace_html :user_info, pluralize(current_user.microposts.count, "micropost") 
page[:micropost_form].reset 
page.replace_html :notice, flash[:notice] 
flash.discard 

:

<div id= "notice"><% flash.each do |key, value| %> 
    <div class="flash <%= key %>"><%= value %></div> 
<% end %></div> 

그리고 여기 내 micropost 컨트롤러의 관련 부분 :

class MicropostsController < ApplicationController 
    before_filter :authenticate, :only => [:create, :destroy] 
    before_filter :authorized_user, :only => :destroy 

    def create 
    @micropost = current_user.microposts.build(params[:micropost]) 
    respond_to do |format| 
     if @micropost.save 
     flash[:success] = "Micropost created!" 

     format.html { redirect_to root_path } 
     format.js 
     else 
     @feed_items = [] 
     render 'pages/home' 
     end 
    end 
    end 

여기 내 create.rjs 파일입니다

플래시 메시지가 표시되지 않는 이유는 무엇입니까?

+0

룩을 시도해보십시오 http://stackoverflow.com/questions/366311/how-do-you-handle-rails-flash- with-ajax-requests – Peyman

+0

정확히 원하는대로 할 수 있을지 모르지만 flash.now [: success] –

답변

8

플래시 메시지는 의도적으로 다음 페이지가로드 될 때까지 세션에 저장됩니다. 아약스의 경우 플래시를 사용하지 마십시오. 예를 들어, 메시지를 대체 할 div가 존재하지 않을 수 있으므로 추가 할 컨테이너로 페이지에 추가해야합니다. 둘째, 플래시가 아닌 일반 변수에서 수행하십시오.

정규 변수 것 대신 플래시의

@message = "Micropost created!" 

[: 성공]

는 JS보기 플래시 대신이 변수를 사용하는 것이있다.

+0

을 사용 해보십시오. div를 추가했다고 생각하지만이 모양에 일반 변수를 사용하면 어떻겠습니까? –

1

대신 page.replace_html :notice, flash[:notice]
이에게 좋은 솔루션이 답변에서이 page.replace_html :notice, "Some info to flash"

관련 문제