Ruby on Rails,枚举来自不同表的用户条件

时间:2016-05-28 18:38:40

标签: ruby-on-rails ruby ruby-on-rails-3 enums

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

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?...

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

用户通过user.rb和school_user.rb之间的关系发挥作用。这有效。我只是想找到一种方法来根据上面的视图中的用户角色/类型设置访问权限。

我希望不是,但我认为我必须在整个申请过程中改变所有条件?

我试过了:

...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

1 个答案:

答案 0 :(得分:1)

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

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

此外,请从SchoolUser类中删除此方法,如注释

中所述