Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 设计一个模型但两个不同的布局_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 4 设计一个模型但两个不同的布局

Ruby on rails 4 设计一个模型但两个不同的布局,ruby-on-rails-4,devise,Ruby On Rails 4,Devise,这可能是一个愚蠢的问题,但它把我吓坏了 假设我有admin和application布局。我有以下代码: # For admin layout class Admin::BaseController < ApplicationController layout 'admin' before_action :authenticate_user! end # For application layout class DashboardController < Applicatio

这可能是一个愚蠢的问题,但它把我吓坏了

假设我有
admin
application
布局。我有以下代码:

# For admin layout
class Admin::BaseController < ApplicationController
  layout 'admin'
  before_action :authenticate_user!
end

# For application layout
class DashboardController < ApplicationController
  before_action :authenticate_user, only: :index

  def index
  end
end
管理布局的
#
类Admin::BaseController
现在,我访问
/admin
,它会将我重定向到
用户/sign_in
,除非我是登录用户。同样,如果我访问
仪表板
也会发生同样的事情

还要注意的是,我使用
user
设计模型来存储用户信息,使用
role
来存储用户角色。这意味着,管理员用户可以访问
admin
版面,而
其他角色
用户可以访问
应用程序
版面

要求:

就像,我已经将管理员用户的
admin
布局和
其他角色的
应用程序的
布局分开

我想将
管理员
应用程序
的登录布局分开


如果用户正在访问
/admin
,那么他们应该重定向到
管理员
登录布局,如果用户正在访问
/dashboards
,如果他们没有登录,他们应该重定向到
应用程序
布局。

您可以在管理基础控制器中设置一个会话变量,如:

class Admin::BaseController < ApplicationController

  # Set the admin layout
  before_action :use_admin_layout  
  before_action :authenticate_user!

  private 

    def use_admin_layout
      session[:admin_layout] = true
    end

end
您只需要考虑清除任何非管理员控制器的会话。可能是在一次行动之前。只需将其添加到您的应用程序文件夹中

private

    def clear_admin_layout
      session[:admin_layout] = nil
    end
并在必要时称之为:

before_action :clear_admin_layout
before_action :clear_admin_layout