避免在root_path中设计validationflash消息

国际化-Flash的消息与-设计和自举

的routes.rb

root :to => 'users#index' devise_for :users, :controllers => {:registrations => "registrations", :sessions => "sessions"} devise_for :users do get '/users/sign_in', :to => 'devise/sessions#new', :as => :new_user_session get '/users/sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session get "/users/sign_up", :to => "registrations#new" end 

当我尝试访问localhost:3000 ,我将指向localhost:3000/users/sign_in ,这是正常的,因为filter ,但是我会收到validation消息

您需要先登录或注册才能继续

怎么避免这个?

我尝试通过在没有帮助的路线中使用match进行更改。

编辑:考虑一个场景:(没有用户会话)如果我尝试访问/角色将被重定向到登录路径,那时我将需要msg。 或者我会放弃其他闪存validation,例如注销,电子邮件存在,错误。

如果用户未登录,请告诉应用程序使用root作为会话#new

配置/ routes.rb中

 authenticated :user do root :to => "users#index" end unauthenticated :user do devise_scope :user do get "/" => "devise/sessions#new" end end 

最简单的方法是将空字符串传递给config文件夹中的devise.en.yml文件。步骤如下:

  1. 在devise.en.yml文件配置中传递一个空字符串:

    en: devise: failure: unauthenticated: ''

  2. 然后在布局中显示flash消息,只有当flash散列没有空值时: <% flash.each do |key, value| %> <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %> <% end %> <% flash.each do |key, value| %> <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %> <% end %>