devise在我的应用程序中运行得很好,除了devies.en的flash消息。yml没有显示在视图中。我做错了什么?
下面是我的注册页面视图,我已经尝试了: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" %>
4条答案
按热度按时间xpszyzbs1#
你没有看到任何闪光灯,因为闪光灯没有被设置为任何东西。看起来你误解了闪光灯的目的。
flash的一般行为是在当前请求中设置为用户当前会话中的值,然后在后续请求中显示该flash消息。此模式允许设置flash、重定向到另一页、然后在从重定向加载的页上显示该flash的操作。然后使用该flash并将其从会话中删除。
例外情况是使用flash.now,该网站使闪存可从当前操作而不是后续操作中获得。
在您的情况下,flash没有显示,因为没有flash可显示。加载注册页面不会设置任何flash消息。flash在您的视图中具有值的唯一方式是,如果其他操作重定向到它,则在它这样做之前设置flash。类似这样的情况
通常你不想在一个特定的视图中调用flash,而是想在你的应用程序布局中调用。这允许flash从任何一个重定向的动作中被设置,并且flash将显示在随后的页面上。从一个特定的视图设置flash需要知道这个特定的视图将是重定向中使用的视图。这可能不总是这样, www. example.com 是一个例外,因为它不需要重定向。如果我确实需要在特定视图中使用flash,我不会使用传统的alert/notice flash变量,因为我会在应用程序布局中查找这些变量,这会导致flash渲染两次。相反,我可以将flash设置为类似于
然后在我的users/show视图中,我会查找flash[:custom],并对该flash执行一些与我的布局中的flash处理不同的操作。实际上,我还没有执行过类似的操作,但如果必须执行,这就是我可能会执行的操作。
dfddblmv2#
你试过去掉flash的东西吗?device_error_messages应该会处理它们。我的工作没有它,原始的device视图也没有它:https://github.com/plataformatec/devise/blob/master/app/views/devise/registrations/new.html.erb
ars1skjm3#
增加涡轮增压配置解决了这个问题。你可以用两种方法。
配置导航格式=['/',:html,:涡轮流]
〈%=表单(资源,:as=〉资源名称,:url =〉注册路径(资源名称),数据:{ turbo:false })执行|f级|%〉
zy1mlcev4#
〈%= render:partial =〉“shared/flash_messages”%〉或=render 'shared/flash_messages'(如果用户正在使用Haml)在您的视图文件中查看错误消息或设计:失败:消息