复杂的轨道模型验证

时间:2012-02-05 21:29:52

标签: ruby ruby-on-rails-3.1

我对ruby不太满意所以我非常感谢所提供的所有帮助:)

我有2个模特诊所和病人

诊所有三个字段,我在创建患者时缓存聚合

max_patients, max_female_patients, max_male_patients

我正在尝试围绕如何编写验证以在添加新患者时检查以下规则:

一个诊所的患者总数不能超过37名, 15名女性患者和22名男性患者是标准, 但是,如果需要替换,我可以 替换3名男性患者为1名女性, 或替换1名女性患者为1名男性

另一个令人讨厌的问题是患者每次加入3次(在一种表格上),每位患者可以选择不同的诊所日。

我希望这是有道理的......我一直在考虑这个问题几个小时,我感觉很糟糕,我正以错误的方式接近这个。

感谢您提前提供任何帮助

1 个答案:

答案 0 :(得分:0)

我不会为这些属性创建数据库列 通过cattr_accessor使用子可继承的类变量 (在ActiveSupport中定义的类扩展)。

我不确定你的意思:

  

如果需要进行替换,我可以替换3名男性患者   1名女性,或替换1名女性患者为1名男性

我认为你没有提供足够的信息,或者无论如何我都不清楚。 例如,何时需要替换?约会是经常性的,还是一次性的(因为它是诊所......我假设是一次性的)。无论如何,希望这会有所帮助。

class Clinic
  has_many  :patients
  cattr_accessor :max_patients, :max_male_patients, :max_female_patients
  self.max_patients = 37
  self.max_male_patients = 22
  self.max_female_patients = 15
end

class Patient
  belongs_to :clinic
  has_many   :appointments
  ...
end

class Appointment
  belongs_to :patient
  before_save :switch_appt_date_if_full

  private
  def switch_appt_date_if_full
    # implementation goes here
    # note: the instances of Appointment can access the clinic's capacities through
    # self.patient.clinic.max_patients, etc...
  end
end

路加福音