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
当我运行此命令时,每章会出现一个“chapters is invalid”(章节无效)错误(如示例所示,硬编码时会出现4个错误)。在生成调用中显式设置:book_id没有帮助。
但是,如果我在添加章节之前保存该书,则不会出现错误。如果我去掉第章中的验证,它是有效的,没有错误。但这两种变通办法都不能让我高兴。一本书不允许在没有章节的情况下存在于数据库中,一个章节不允许在没有链接到书的情况下存在于数据库中。实施关系约束的正确方法是什么?