【发布时间】:2009-07-01 22:53:36
【问题描述】:
更具体地说,“我如何验证一个模型是否需要创建至少 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 哈希中的嵌套任务属性将产生 valid 任务,此验证实际上正常工作。但是,如果他们生成了一个 invalid 任务,那么该任务将不会被创建,您最终会得到一个少于 2 个任务的项目,因此是一个 invalid 项目对象。
据我了解,这是因为它无法确定任务属性是否有效,直到它尝试保存任务,并且因为 - 据我所知 -任务无法在项目之前保存,项目不知道任务是否有效。我的假设是否正确?
无论如何,我希望有一个快速的答案,但它似乎没有我希望的那么琐碎。如果您有任何建议,将不胜感激。
【问题讨论】:
标签: validation model associations sinatra datamapper