Какую проверку правильности включить для подчиненных моделей? Например, допустим, у вас есть книги с главами. Количество глав в книге определяется при первом создании книги.
class Book < ActiveRecord::Base
has_many :chapters
def build_chapters(count)
(1..count).each do |i|
chapters.build(:sequence_number => i)
end
end
end
class Chapter < ActiveRecord::Base
belongs_to :book
validates_presence_of :book_id, :sequence_number
end
class BooksController < ApplicationController
def create
@book = Book.new(params[:book])
@book.build_chapters(4) #to simplify example, hardcode number of chapters
@book.save
# View-related code omitted for simplicity
end
end
Когда я запускаю это, я получаю одну ошибку "главы недействительны" на главу (4 ошибки, когда жестко запрограммированы как пример) Явная установка: book_id в вызове сборки не помогает.
Однако, если я сохраню книгу до добавления глав, она работает, ошибок нет. Если я возьму проверки в главе, это работает, без ошибок. Но ни один из этих обходных путей не делает меня счастливым. Нельзя допустить, чтобы в базе данных существовала книга без ее глав, а в базе данных не должно существовать главы, не связанной с книгой. Как правильно применять ограничения отношений?
Я новичок в рубине и рельсах, так что вполне возможно, что я просто еще не думаю о рельсах. Пожалуйста, просветите меня.