为不同的Devise范围创建单独的导航栏

时间:2016-01-12 21:59:40

标签: ruby ruby-on-rails-4 routes

我的应用有三个单独的登录信息:

routes.rb中:

  devise_for :visitors, controllers: { registrations: 'visitor/registrations' }
  ## Visitors Authentication Scope ##
    devise_scope :visitor do
      authenticated :visitor do
        root 'properties#index', as: :visitor_authenticated_root
      end
      unauthenticated :visitor do
        root 'devise/sessions#new', as: :visitor_unauthenticated_root
      end
    end
  ## END Visitors Authentication Scope ##

  devise_for :admins, controllers: { registrations: 'admin/registrations' }
  ## Administration Authentication Scope ##
    devise_scope :admin do
      authenticated :admin do
        root 'properties#index', as: :admin_authenticated_root
      end
      unauthenticated :admin do
        root 'devise/sessions#new', as: :admin_unauthenticated_root
      end
    end
  ## END Administration Authentication Scope ##

  devise_for :residents, controllers: { registrations: 'resident/registrations' }
  ## Residents Authentication Scope ##
    devise_scope :resident do
      authenticated :resident do
        root 'properties#index', as: :resident_authenticated_root
      end
      unauthenticated :resident do
        root 'devise/sessions#new', as: :resident_unauthenticated_root
      end
    end
  ## END Residents Authentication Scope ##

目前他们都指向properties#index。管理范围将指向管理页面作为路径,但每个管理页面将具有不同的导航栏功能和不同的视图布局。

如果我使用布尔值来设置我的用户类型,我通常会使用if / else语句,但是我为此创建了单独的模型。

如何设置不同的布局?我阅读了一些文章,但其中很多文章都没有意义,或者没有做我想要完成的事情。

我正在使用Rails 4和Ruby 2。

1 个答案:

答案 0 :(得分:1)

只需制作一些部分内容并使用if语句,如:

if signed_in?
  if current_visitor
     = render 'path/to/visitor/navbar'
  if current_admin
     = render 'path/to/admin/navbar'
  if current_resident
     = render 'path/to/resident/navbar'