Rails 5:仅当该ID没有填写的特定字段时,才插入/更新

时间:2019-05-30 08:03:03

标签: validation ruby-on-rails-5

我有一个Followups表,其中包含以下字段:patient_iddeath_date(以及其他字段..)。

同一个patient_id可能有多个记录,但是该death_date只能有一个patient_id。 唯一索引无法使用,因为用户可以插入两个不同的death_date。

在Rails 5中,哪一种是实现此目标的最佳方法?

请尽可能举一个例子。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以通过对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记录中,因为每个病人死亡仅发生一次。