2016-02-17 83 views
3

我創造了我的Rails應用新的資源後,創建於母公司模式,JSON發送到我的終點是這樣的:Rails的後運行節能父模型和嵌套協會

{ 
    "resource1": { 
    "resource2_attributes": [{ 
     "name": "Test 1", 
     "resource3_attributes": [{ 
     "field1": "test" 
     }] 
    }] 
    } 
} 

嵌套屬性工作正確,並且正在設置父模型的關聯。

但是,當頂級的resource1被保存時,模型上的after_create回調被觸發(在保存關聯之前)。在Resource1上的after_create回調使用子關聯作爲其邏輯。

如何讓我的Rails應用程序保存父級模型以及子聯合體然後運行回調?

+0

原來這是一個愚蠢的問題,在2016年2月19日的Rails中是不可能的。查看我的答案以查看備選方案。 – Noah

回答

1

結果Rails沒有能力做我在這篇文章的時候要做的事情。

我被建議添加一個after_add關聯回調函數,除了傳遞給該方法的記錄沒有設置id因爲它還沒有提交給數據庫。 after_add方法需要訪問id,因爲它正在創建關聯的記錄,但如果沒有id,就不能這樣做。

下一個選項:

而是使用在關聯的after_add回調,並且由於它是行不通的增加對父模型一個ActiveRecord的回調,因爲執行的順序是,像這樣:保存父 - >運行父回調 - >保存子項,當「運行父母回調」部分需要子數據時,但由於未按操作順序創建,因此無法訪問它。

因此,我最終採取的路線是將回調放在子模型上,並引用父關聯來獲取我需要的數據。

不是最喜歡的方法,因爲我不能在父模型中擁有邏輯,這在我看來應該屬於它,但至少一切運行順利,數據有意義。