2010-11-19 85 views
10

有一個validate符可以在聯想直接使用(見4.1.2.12在這個Rails Guide,也是一個validates_associated(見3.2在那個Rails Guide)。 在哪裏都不同?驗證VS validates_associated

+0

這裏是一個[更新的鏈接到Rails指南條目validates_associated](http://guides.rubyonrails.org/active_record_validations.html#validates-相關) – stereoscott 2013-07-28 23:47:38

回答

2

他們既驗證了相關模型(一個或多個)。

不同的是,第一個是在關聯的選項(如belongs_tohas_many等)。例如,你在你的協會定義的「驗證的行爲」。

在經典的「作者有很多書籍」示例中,假設您在Book模型上啓用belongs_to :author, :validate => true。每次您驗證書籍模型時,關聯的作者也必須有效。

另一個是可以添加到其他驗證的單獨的驗證規則。因此,在這種情況下,您可以將關聯對象的驗證與其他驗證規則一起啓用。

這可以反過來工作。作者:has_many :books ; validates_associated :books。當您驗證作者對象時,所有書籍也都會被驗證。

+1

要使用validates_associated沒有雙重驗證,你必須明確關閉:在關聯上驗證。我仍然想知道爲什麼validates_associated存在,如果它與默認值相同。有任何想法嗎? – 2011-05-13 15:53:20

+3

我和@zardox有完全相同的問題,但我不確定這是否可以解決問題。你能否解釋兩種方法之間的實際區別,而不是它們聲明的位置。您是否首先暗示,這本書實際上是爲作者創建了一個驗證背壓,並且如果該書無效,則會迫使作者無效?這似乎沒有封裝。 – 2011-06-18 10:51:49

+1

我還是很困惑。 has_many:books,:validate => true和has_many:books之間的區別是什麼? validates_associated:書? (你對差異的描述使得它們聽起來像是一樣的,這與解釋它們的不同之處相反)。 – 2011-12-29 19:19:07