Вы можете сделать это с помощью функции обратного вызова для Followup
модели: предположим, что Patient
has_many :followups
class Followup
belongs_to :patient
validate :check_for_existing_death_date
private
def check_for_existing_death_date
# This will grab the first one if any with a death date exist
# This also assumes that the patient_id and patient exist
followup = patient.followups.where("death_date IS NOT NULL").take
# if you want to raise an error...
if followup
errors.add(:death_date, 'There is already a death date for this patient')
return false
end
# If not, do something with the data
# if followup
# self.death_date = nil # or followup.death_date if you want it saved on followups as well
# end
end
end
Я думаю, что лучший способ сделать это - сохранить death_date
в записи Patient
, поскольку смерть наступает только один раз на пациента.