Аякс флеш сообщение в рубине на рельсах - PullRequest
2 голосов
/ 04 марта 2011

Я пытаюсь показать флэш-сообщение и отобразить его с помощью Ajax, но, похоже, сообщение не появляется , пока я не обновлю страницу.

Вот мой файл create.rjs:

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>

А вот соответствующая часть моего контроллера микросообщений:

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

Так почему же флэш-сообщение не появляется сразу же?

Ответы [ 2 ]

8 голосов
/ 04 марта 2011

Флеш-сообщения по дизайну хранятся в сессии до следующей загрузки страницы.В случае с ajax не используйте flash.С одной стороны, div для замены сообщения может не существовать, поэтому вам нужно добавить его на свою страницу в качестве контейнера для добавления.Во-вторых, просто сделайте это из обычной переменной, а не из flash.

Обычная переменная будет:

@message = "Micropost created!"

вместо flash [: success]

JSview будет использовать эту переменную вместо flash.

1 голос
/ 04 марта 2011

вместо page.replace_html :notice, flash[:notice]
Попробуйте это page.replace_html :notice, "Some info to flash"

...