kat*_*tie 5 ruby-on-rails devise ruby-on-rails-3
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" %>
Run Code Online (Sandbox Code Playgroud)
你没有看到任何闪光,因为闪光灯没有被设置为任何东西.看起来你错误地解释了闪光灯的用途.
闪存的一般行为将在当前请求中设置为用户当前会话中的值,然后在后续请求中显示该闪存消息.此模式允许操作设置闪存,重定向到另一个页面,然后在该页面上显示从重定向加载的闪存.然后消耗闪存并从会话中删除.
例外情况是使用flash.now使当前操作可以使用闪存,而不是后续操作.
在您的情况下,闪光灯不显示,因为没有闪光灯显示.加载注册页面不会设置任何Flash消息.闪存在视图中有一个值的唯一方法是,如果某个其他操作重定向到它,在闪存之前设置闪存.像这样的东西
redirect_to new_user_registrations_path, :notice => "This flash will show up on the sign up page"
Run Code Online (Sandbox Code Playgroud)
通常,您不希望在特定视图中调用闪存,而是在应用程序布局中调用闪存.这允许从执行重定向的任何操作设置闪存,并且闪存将显示在随后的页面上.从特定视图设置闪存需要知道特定视图将是重定向中使用的视图.这可能并非总是如此,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
Run Code Online (Sandbox Code Playgroud)
然后在我的用户/显示视图中,我会寻找flash [:custom]并使用与我的布局中的闪存处理不同的闪存处理.我实际上并没有做过这样的事情,但如果我不得不这样做,我就是这样做的.
你试过把闪光灯的东西拿出来吗?devise_error_messages 应该处理它们。我的没有它也可以工作,原始的设计视图也没有它: https: //github.com/plataformatec/devise/blob/master/app/views/devise/registrations/new.html.erb