Обнаруживать дубликаты и обновлять вместо создания с accepts_nested_attributes_for - PullRequest
0 голосов
/ 05 марта 2019

Я бы хотел использовать функцию обратного вызова для проверки параметров accepts_nested_attributes_for на наличие дублирующихся записей и обновления вместо создания при выполнении условий.

Возможно ли это?

Что я пробовал:

before_validation :update_instead

  def update_instead
    unless self.id
      existing_provision = Provision.where(survey_id: self.survey_id).where(service_id: self.service_id).first
      if existing_provision
        self.id = existing_provision.id
      end  
    end
  end

Это не работает, так как просто пытается создать запись с набором идентификаторов, что, очевидно,вызывает ошибку с повторяющимся идентификатором.

1 Ответ

0 голосов
/ 07 марта 2019

Как я понимаю ваш вопрос, вы можете использовать find_or_create_by для этой цели

provision = Provision.find_or_create_by(survey_id: self.survey_id, service_id: self.service_id)
provision.update(foo: bar)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...