0

UserCanCan認定のモデルを持っています。

したがって、ユーザーは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

属性がIDではないシフトの作成Shiftsのみを許可し、シフトの作成を許可しないようにするには、バリデーターをどのように記述すればよいですか?doctorsuser_idpatient

4

3 に答える 3

0

カスタム チェッカー (他の回答と同様) は正常に機能Userしますが、システム内での概念と役割を分離することを検討してください。Doctorになりたい人がいたらどうしPatientますか?

Doctorsとの別々のテーブルを作成するかもしれませPatientsん。

したがって、チェックを実装するのは簡単です。つまり、作成することは不可能ShiftですPatient...

STI (単一テーブル継承) アプローチを使用すると、このようなものを処理するのがすぐに面倒になります (処理するには多すぎます)。

于 2013-09-13T12:02:56.297 に答える
0

カスタム検証メソッドを作成する必要があります。このような何かがあなたのためにそれをするはずです。

validate :check_doctor
def check_doctor
  errors.add(:doctor, "User is not a doctor") unless self.doctor && self.doctor.role == "doctor" 
end
于 2013-09-13T11:52:04.480 に答える
0

これを試して:

validate :check_for_patient

private
  def check_for_patient
    errors.add(:base, 'error message') if self.doctor && self.doctor.role == 'patient'
  end
于 2013-09-13T11:52:29.640 に答える