【问题标题】:Ajax flash message in ruby on railsruby on rails 中的 Ajax flash 消息
【发布时间】:2011-07-08 11:03:49
【问题描述】:

我正在尝试显示一条 Flash 消息并使用 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

那么为什么没有立即显示 Flash 消息?

【问题讨论】:

标签: javascript ruby-on-rails ruby ajax rjs


【解决方案1】:

Flash 消息按设计存储在会话中,直到下一个页面加载。在ajax的情况下,不要使用flash。一方面,用于替换消息的 div 可能不存在,因此您需要将其作为要添加的容器添加到页面中。其次,只需从常规变量中执行此操作,而不是 Flash。

一个常规变量是:

@message = "Micropost created!"

代替flash[:success]

js 视图会使用这个变量而不是 flash。

【讨论】:

  • 我想我确实添加了 div,但是使用常规变量会是什么样子?
【解决方案2】:

而不是page.replace_html :notice, flash[:notice]
试试这个page.replace_html :notice, "Some info to flash"

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2010-10-17
    • 2014-04-28
    • 1970-01-01
    相关资源
    最近更新 更多