原因是:在Rails 3中重定向后没有显示通知

时间:2011-01-25 22:06:02

标签: ruby-on-rails-3

我的控制器中有以下代码

  def create
    @tv_show = TvShow.new(params[:tv_show])

    respond_to do |format|
      if @tv_show.save
        format.html { redirect_to(tv_shows_path, :notice => 'Tv show was successfully created.') }
        format.xml  { render :xml => @tv_show, :status => :created, :location => @tv_show }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @tv_show.errors, :status => :unprocessable_entity }
      end
    end
  end

以及我的tv_shows / index.html.erb

中的以下内容
<div id="notice"><%= notice %></div>

但是当我创建一个新条目时,重定向到tv_shows_path后才会出现通知消息。有谁知道为什么?

4 个答案:

答案 0 :(得分:17)

您是否有任何理由尝试使用:notice而不是flash[:notice]

控制器:

 respond_to do |format|
  if @tv_show.save
    format.html { 
      flash[:notice] = 'Tv show was successfully created.'
      redirect_to tv_shows_path 
    }
    format.xml  { render :xml => @tv_show, :status => :created, :location => @tv_show }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @tv_show.errors, :status => :unprocessable_entity }
  end
end

查看:

<% if flash[:notice] %>
    <div id="notice"><%= flash[:notice] %></div>
<% end %>

答案 1 :(得分:4)

我遇到了类似的'问题',原因是我正在重定向到本身有另一个重定向的动作。在上述情况下,最可能的原因是tv_shows_path内存在另一个重定向。

在我的情况下,我在过滤器中有这样的东西:

redirect_to root_url, notice: 'Unauthorized access!'

并且root_url设置为指向home#index

# Home controller
def index
  if user_signed_in? && current_user.admin?
    redirect_to users_path
  else
    redirect_to customers_path
  end
end

第二次redirect_to导致我的'unauthorized_access'通知没有显示。

解决方案是简单地重定向到customers_path而不是root_url。希望这有助于某人。

答案 2 :(得分:1)

我遇到了同样的问题,错误很愚蠢,但有时候却无法察觉。

我的应用程序布局中包含以下代码:

<div id="content" >
    <div class="wrapper">
        <% flash.each do |name, msg| %>
            <% content_tag :div, msg, class: "flash #{name}"%>
        <% end %>
        <%= yield %>
    </div>
</div>

现在,您能看出为什么我无法看到我的短信吗?

烨!您应该检查是否在此处加上=符号:

<%= content_tag :div, msg, class: "flash #{name}"%>

答案 3 :(得分:0)

代码不起作用的原因是我的身份验证代码出现问题......在我从头开始实现新的身份验证方式之后,上面的代码正在运行。