避免在root_path中设计验证flash消息

时间:2014-06-06 13:48:47

标签: ruby-on-rails ruby-on-rails-3 devise

I18n-Flash-Messages-with-Devise-and-Bootstrap

的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,但是我会收到验证消息

  

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

如何避免这种情况?

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

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

2 个答案:

答案 0 :(得分:3)

告诉应用程序使用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

答案 1 :(得分:0)

最简单的方法是将空字符串传递给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 %>