Validation Rails 5:仅当存在';没有为该id填充特定字段

Validation Rails 5:仅当存在';没有为该id填充特定字段,validation,ruby-on-rails-5,Validation,Ruby On Rails 5,我有一个跟进表,其中包含以下字段:患者id,死亡日期(以及其他字段..) 同一患者id可以有多个记录,但该患者id只能有一个死亡日期。 唯一索引不起作用,因为用户可以插入两个不同的死亡日期 在Rails 5中实现这一点的最佳方法是什么 如果可能,请举例说明 谢谢您可以通过后续型号上的回调来完成此操作: 假设一名患者有许多后续行动 class Followup belongs_to :patient validate :check_for_existing_death_date pr

我有一个
跟进
表,其中包含以下字段:
患者id
死亡日期
(以及其他字段..)

同一
患者id
可以有多个记录,但该
患者id
只能有一个
死亡日期。
唯一索引不起作用,因为用户可以插入两个不同的死亡日期

在Rails 5中实现这一点的最佳方法是什么

如果可能,请举例说明


谢谢

您可以通过
后续
型号上的回调来完成此操作: 假设一名
患者
有许多后续行动

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

我认为最好的方法是将
死亡日期
存储在
患者
记录上,因为每个患者只会发生一次死亡。

你说得对,我已经将日期存储在患者中,但在委员会的要求下,我将其放在后续文件中。(如果我在Rails方面更熟练一些,我可能会避免这种情况。)。但是,您的解决方案适用于新插入,但删除更新中的日期,即使数据库中只存储了一个死亡日期。另外,如何停止更新/插入并显示错误?然后您可以将其更改为验证。更新了答案。更新数据库中的唯一日期时仍会引发错误。谢谢你的病人……啊,这可能是模型上的一个单独的验证问题。您可能需要在该验证中添加
allow_nil:true
,但是如果不查看整个模型,我就不能说更多了。很高兴它能起作用。至少你在正确的轨道上