Как разрешить событие сохранения записи в случае сбоя проверки вложенной ассоциации - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть случай, когда у модельного родителя много детей.Модель Child имеет несколько проверок.

В форме родительской модели я создаю несколько экземпляров модели Child с использованием вложенных атрибутов.Проблема заключается в том, что если одна из проверок дочерних элементов завершается неудачно, вся модель Parent не сохраняется, а все остальные допустимые дочерние элементы не создаются.

Есть ли способ предотвратить такое поведение и создать вседействительные ассоциации и молча провалить недействительные?

Я пытался удалить опцию inverse_of, но она не сработала.

ОБНОВЛЕНИЕ :

Кажется, что это невозможно, поэтому я выступил с этим решением.Я добавил skip_validation, чтобы избежать проверки связанных записей дважды (одна в методе children_attributes =, а другая при сохранении).

class Parent
  children_attributes=(attributes)
    super

    new_children = self.children.select { |child| child.new_record? }

    new_children.each do |child|
      if child.valid?
        child.skip_validation = true
      else
        self.children.delete(child)
      end
    end 
  end
end

class Child
  attr_accessor :skip_validation    

  validates :attribute, presence: true, unless: :skip_validation?

  def skip_validation?
    !!skip_validation
  end
end
...