【发布时间】:2009-10-01 20:02:23
【问题描述】:
对从属模型包含哪些正确类型的验证?例如,假设您有带有章节的书籍。每本书的章节数是在本书首次创建时确定的。
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 没有帮助。
但是,如果我在添加章节之前保存这本书,它可以工作,没有错误。如果我在章节中取出验证,它就可以工作,没有错误。但这些变通办法都没有让我高兴。一本书不应该被允许在没有章节的情况下存在于数据库中,并且一个章节不应该被允许存在于数据库中而不链接到一本书。执行关系约束的正确方法是什么?
我是 ruby 和 rails 的新手,所以我完全有可能还没有考虑 rails-ese。请教育我。
【问题讨论】:
-
对为什么这个问题被否决有任何反馈吗?