基于角色的条件验证

Conditional validations based on role

我有三种用户类型:

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': 未定义的方法人员?'对于用户(调用 'User.connection' 建立连接):Class (NoMethodError)

除了 if: staff,我还需要进一步说明吗?如果是,怎么做?

谢谢!

不用担心,试试这个:

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

编辑

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

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