我拥有CanCan授权的User
模型。
因此,用户拥有此数组的role
属性:=> ['doctor', 'patient']
class Shift < ActiveRecord::Base
belongs_to :doctor, class_name: "User", foreign_key: :user_id
belongs_to :day
validates :shift, presence: true
validates :cardiologist, presence: true
end
我应该如何编写验证程序以仅为Shifts
创建doctors
而不允许在user_id
属性不是patient
ID时创建转移?
答案 0 :(得分:0)
您应该编写自定义验证方法。这样的事情应该适合你。
validate :check_doctor
def check_doctor
errors.add(:doctor, "User is not a doctor") unless self.doctor && self.doctor.role == "doctor"
end
答案 1 :(得分:0)
试试这个:
validate :check_for_patient
private
def check_for_patient
errors.add(:base, 'error message') if self.doctor && self.doctor.role == 'patient'
end
答案 2 :(得分:0)
嗯,自定义检查器(如在其他答案中)可以正常工作,但考虑将User
的概念与系统中的角色分开。如果某些Doctor
想要成为Patient
?
也许为Doctors
和Patients
创建单独的表?
因此,实施支票很容易。即为Shift
...
Patient
是不可能的
使用STI(单表继承)方法很快就会处理这样的事情(太多无法处理)。