mardi 31 octobre 2017

Rails nested models and child validation

I have two models.

Exemplary:

class Book < ActiveRecord::Base
  has_many :pages, dependent: :destroy
  accepts_nested_attributes_for :pages, allow_destroy: true
end

class Page < ActiveRecord::Base
  belongs_to :book

  validate_on_create :count_within_bounds

  LIMIT = 200

  private

  def count_within_bounds
    if self.book.pages.count >= LIMIT
      errors.add_to_base("Number of pages cannot be greater than #{LIMIT}")
    end
  end
end

Now when update the book through a nested form everything is working just fine. I can edit let's say the title and add new pages. But if the page validation fails the other changes made to the book model are not getting saved either.

I understand that it's all being saved in one transaction but is there a way to persist the parent regardless without having to do it manually in two steps, i.e. saving the parent first without pages_attributes?

Aucun commentaire:

Enregistrer un commentaire