更具體地說,「如何驗證模型是否至少需要創建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