2016-11-25 31 views
0

比方說,我有這樣的簡單關聯:保存在同一時間,錯誤HANDELING

class Post < ActiveRecord::Base 
    has_many :comments # :autosave option is not declared 
end 

而這種代碼:

post = Post.new(title: 'ruby rocks') 
post.comments.build(body: 'hello world') 
post.save # => saves both post and comment 

會發生什麼,如果post是無效的,它仍然創造有何評論?

如果連接的comment無效,會發生什麼情況?

我想那commentpost是無效的,它什麼也不保存。我做對了嗎?

我需要validates_associated?謝謝

回答

0

如果該信息是無效的,它不會保存相關記錄。根據Active Record Autosave Association上的文檔:

保存父項及其關聯和銷燬標記的關聯都發生在一個事務中。這絕不應該使數據庫處於不一致的狀態。

如果還必須驗證子記錄,則您確實需要validates_associated。但是請注意,只需在協會的一側撥打validates_associated,否則您將創建一個循環參考。

+0

意思是我應該使用'validates_associated' –

+0

是的,把validates_associated放在你的Post模型中,但不是在你的Comment模型中。 – mysmallidea

相關問題