避免在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文件。步骤如下:
-
在devise.en.yml文件配置中传递一个空字符串:
en: devise: failure: unauthenticated: ''
- 然后在布局中显示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 %>