Ruby Rails,从另一个 table 枚举用户条件

Ruby on Rails, Enum user conditions from a different table

我在 table 中声明了如下枚举,与我的主要用户 table (User.rb) 分开。我注册用户并给他们一个角色 table:

school_user.rb

class SchoolUser < ActiveRecord::Base
    belongs_to :user
    belongs_to :school

    enum user_type: [:school, :student, :parent, :teacher]

def school?
end

def teacher?
end

def student?
end

def parent?
end


end

我认为我不必在这里定义每个角色,但我试过了。

我之前使用布尔方法来分离用户,但切换到枚举。我曾经使用这种方法类型来限制基于角色的视图:

...unless current_user.teacher?...

这工作正常,但现在我在不同的模型中向用户声明了枚举 table 它不起作用。

用户通过 user.rb 和 school_user.rb 之间的关系具有角色。这行得通。我只是在寻找一种在上述视图中根据用户 role/type 设置访问权限的方法。

我希望不会,但我想我必须在整个申请过程中更改所有条件?

我试过了:

...unless current_user.school_user.teacher?...

和其他变化。

非常感谢任何帮助。谢谢。

编辑:User.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  validates :first_name, presence:true,
            length: {minimum: 4 }
  validates :last_name, presence:true

  has_many :messages, foreign_key: :sender_id
  has_many :notes
  has_one :school_user

  accepts_nested_attributes_for :school_user

您可以将此方法委托给 :school_user:

class User < ActiveRecord::Base
  delegate :school?, :student?, :parent?, :teacher?, to: :school_user

此外,从 SchoolUser class 中删除此方法,如评论中所述