我在has_many關係上存在驗證問題,但是父項不存在。但是,在創建/保存父對象時,我想確保特定的子項(具有某些屬性)已經保存。對has_many關聯的Rails驗證
有一個Parent
對象,has_many
Child
對象。 Child
對象首先被保存到數據庫中,因此沒有任何對父對象的引用。關聯結構是:
Parent
- has_many :children
Child
- someProperty: string
- belongs_to: parent
例如,有三個子對象:
#1 {someProperty: "bookmark", parent: nil}
#2 {someProperty: "history", parent: nil }
#2 {someProperty: "window", parent: nil }
父纔有效,如果它包含孩子someProperty history
和window
對象。
p = Parent.new(params[:data])
for type in %w[bookmark_id history_id window_id]
if !params[type].blank?
p.children << Child.find(params[type])
end
end
// save the parent object p now
p.save!
當孩子們被分配到父與<<
,他們沒有立即保存爲父母的ID不存在:
我爲建立父控制器內。而且父母要得救,至少必須有兩個孩子。我怎麼能解決這個問題?任何輸入是受歡迎的。
我喜歡這種方法,因爲它保持模型內的邏輯。 send(t)函數在這裏做什麼?它是否被父對象調用? – Anurag 2010-02-04 07:18:21
是的,因爲我們將子類型動態地定義爲父對象的訪問者(屬性),所以我們也需要動態訪問它們。這就是爲什麼我們需要調用父對象的send方法。 – 2010-02-04 11:58:44