Rails 5: вставка / обновление, только если для этого идентификатора нет заполненного поля - PullRequest
1 голос
/ 30 мая 2019

У меня есть таблица Followups с полями: patient_id, death_date (и другие поля ..).

Может быть несколько записей для одного patient_id, но для этого patient_id должна быть только одна death_date. Уникальный индекс не будет работать, так как пользователь может вставить две разные death_date.

Какой лучший способ добиться этого в Rails 5?

Если возможно, приведите пример.

Спасибо

1 Ответ

1 голос
/ 30 мая 2019

Вы можете сделать это с помощью функции обратного вызова для 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, поскольку смерть наступает только один раз на пациента.

...