更具体地说,“如何验证模型是否至少需要创建x个有效的关联模型?”。我一直在尝试验证嵌套模型,它们是以与父代相同的形式创建的(并最终显示立即验证la 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个任务,因此会产生项目对象无效的。
据我所知,这是因为它不能确定任务属性是否有效,直到它试图保存任务,并且因为 - 据我所知 - 任务不能在项目之前得到保存,项目不知道这些任务是否有效。我认为这是否正确?
无论如何,我希望能有一个快速的答案,但似乎没有那么微不足道,我希望。如果你有任何建议,那将不胜感激。
感谢克里斯,这些都是很好的建议,虽然我不是在寻找特定于数据库的解决方案。我希望逻辑和验证保持在应用程序本身内。如果最差的情况最糟糕,我只会写一个保存后钩来验证记录(丑陋,我知道,但可能是唯一明智的方法)。 – 2009-06-18 20:34:28