设计闪存消息不会显示

时间:2011-10-30 21:59:32

标签: ruby-on-rails ruby-on-rails-3 devise

Devise在我的应用程序中完美运行,除了来自devise.en.yml的flash消息不会显示在视图中。我做错了什么?

以下是我的注册页面视图,我已尝试过:alert:notice但无效。

提前谢谢

<h2>Sign up</h2>

<% if flash[:alert] %>
  <%=flash[:alert]%>
<%end%>

<%= form_for(resource,:as=>resource_name,:url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>
  <p><%= f.label :Username %></p>
  <p><%= f.text_field :username %></p>

  <p><%= f.label :email %></p>
  <p><%= f.text_field :email %></p>

  <p><%= f.label :password %></p>
  <p><%= f.password_field :password %></p>

  <p><%= f.label :password_confirmation %></p>
  <p><%= f.password_field :password_confirmation %></p>

  <p><%= f.submit "Sign up" %></p>
<% end %>

<%= render :partial => "devise/shared/links" %>

3 个答案:

答案 0 :(得分:6)

你没有看到任何闪光,因为闪光灯没有设置为任何东西。这似乎是你误解了闪光灯的目的。

将闪存的一般行为设置为当前请求中用户当前会话中的值,然后在后续请求中显示该闪存消息。此模式允许操作设置闪存,重定向到另一个页面,然后在该页面上显示从重定向加载的闪存。然后消耗闪存并从会话中删除。

例外情况是使用flash.now使当前操作可以使用闪存,而不是后续操作。

在您的情况下,闪光灯未显示,因为没有闪光灯显示。加载注册页面不会设置任何Flash消息。闪存在视图中有一个值的唯一方法是,如果某个其他操作重定向到它,在闪存之前设置闪存。像这样的东西

redirect_to new_user_registrations_path, :notice => "This flash will show up on the sign up page"

通常,您不希望在特定视图中调用闪存,而是在应用程序布局中调用闪存。这允许从执行重定向的任何操作设置闪存,并且闪存将显示在随后的页面上。从特定视图设置闪存需要知道特定视图将是重定向中使用的视图。这可能并非总是如此,flash.now将是一个例外,因为它不能重定向。如果我确实需要在特定视图中使用闪存,我不会使用传统的警报/通知闪存变量,因为我会在我的应用程序布局中查找并将导致我的闪存被渲染两次。相反,我可能会将闪光灯设置为

class UsersController < ApplicationController
  def custom_action
    @user = User.find params[:id]
    do_something_with @User
    flash[:user] = "Custom action completed!"
    redirect_to @user
  end
end

然后在我的users / show视图中,我会寻找flash [:custom]并使用与我的布局中的flash处理不同处理的闪存做一些事情。我实际上并没有做过这样的事情,但如果我不得不这样做,我就是这样做的。

答案 1 :(得分:3)

你试过取出闪光灯吗? devise_error_messages应该照顾它们。我的工作没有它,原始的设计视图也没有:https://github.com/plataformatec/devise/blob/master/app/views/devise/registrations/new.html.erb

答案 2 :(得分:0)

&lt;%= render:partial =&gt; &#34;共享/ flash_messages&#34; %GT;                        要么 = render&#39; shared / flash_messages&#39; (如果有人使用Haml)  在您的视图文件中查看错误消息或设计:failure:messages