基于角色的条件验证

时间:2017-09-27 22:04:03

标签: ruby-on-rails enums roles

我有三种用户类型:

enum role: { staff: 0, clinician: 1, admin: 2 }

每位员工都属于一所大学,并在注册期间选择他们的大学。我想强制执行模型验证,要求员工用户使用university_id。

为了实现这一目标,我在app / models / concerns / staff_user.rb中有这一行

validates :university_id, presence: true, if: staff?

这是整个文件:

require 'active_support/concern'

module StaffUser
  extend ActiveSupport::Concern

  included do
    belongs_to :university
    has_many :patients
    has_many :referral_requests
    validates :university_id, presence: true, if: staff?

  end

  class_methods do
  end
end

然而,当我这样做时,我收到以下错误:

method_missing':undefined methodstaff?' for User(调用'User.connection'建立连接):Class(NoMethodError)

我是否需要进一步指明if:staff?如果是的话,怎么样?

谢谢!

1 个答案:

答案 0 :(得分:1)

不要使用关注点试试这个:

validates : university_id, presence: true, if: lambda { self.role == 'staff' }

修改

实际上,来自@dukedave的更好的解决方案:

validates :university_id, presence: true, if: :staff?