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