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
,但是如果不查看整个模型,我就不能说更多了。很高兴它能起作用。至少你在正确的轨道上