更具体地说,“如何验证模型是否需要创建至少 x 个有效的关联模型?” . 我一直在尝试验证以与父级相同的形式创建的嵌套模型(并最终通过 jQuery 显示即时验证)。作为一个流行的例子,让我们假设以下模型和模式。
class Project
include DataMapper::Resource
property :id, Serial
property :title, String, :nullable => false
has 2..n, :tasks
end
class Task
include DataMapper::Resource
property :id, Serial
property :project_id, Integer, :key => true
property :title, String, :nullable => false
belongs_to :project
end
如您所见,所有验证都在模式定义中完成。这里重要的是“ has 2..n, :tasks
”。鉴于 params 哈希中的嵌套任务属性将生成有效任务,此验证实际上正常工作。但是,如果他们产生无效任务,则不会创建该任务,您最终会得到一个少于 2 个任务的项目,因此是一个无效的项目对象。
据我了解,这是因为它无法确定任务属性是否有效,直到它尝试保存任务,并且因为 -据我所知- 在项目之前无法保存任务,该项目不知道任务是否有效。我的假设是否正确?
无论如何,我希望会有一个快速的答案,但它似乎没有我希望的那么微不足道。如果您有任何建议,将不胜感激。