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 中删除此方法,如评论中所述
我在 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 中删除此方法,如评论中所述