设计Flash消息不会显示

Devise在我的应用程序中运行得很好,除了来自devise.en.yml的flash消息没有显示在视图中。 我究竟做错了什么?

以下是我的注册页面视图我已经尝试了两个:alert:notice但不工作。

先感谢您

 

Sign up

resource_name,:url => registration_path(resource_name)) do |f| %>

"devise/shared/links" %>

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

你没有看到任何闪光,因为闪光灯没有被设置为任何东西。 看起来你错误地解释了闪光灯的用途。

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

例外情况是使用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 

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

<%= render:partial =>“shared / flash_messages”%>或= render’shared / flash_messages’(如果人们正在使用Haml)在您的视图文件中查看错误消息或设计:failure:messages