2012-07-06 41 views
5

Ruby on Rails的默認行爲是保存對集合關聯所做的更改。 有什麼方法可以改變這種行爲,這樣我就可以修改內存中的集合,而不必將更改寫入數據庫。通過has_many關聯禁用自動保存 - 從會話中斷開ActiveRecord實體的連接

所以,如果我有兩個類:

class Project < ActiveRecord::Base 
    has_many :tasks 

class Task < ActiveRecord::Base 
    belongs_to :project 

,並寫這樣一些代碼:

Project.tasks.clear 
Project.tasks << task1 
Project.tasks << task2 

然後它會自動刪除與該項目相關的所有任務,並自動將更改寫入到數據庫。

這是我試圖實現的一個人爲的例子。我知道我可以使用Project.tasks.build()將新任務添加到集合中,而不會自動保存它,但我添加的任務不是新任務。它們是指向定義的一組有限任務的鏈接在分貝。你可以把它們看作是枚舉任務中的條目。另外Project.tasks.clear立即命中db。

在Java世界中,使用Hibernate,我會斷開實體與會話的連接,並能夠修改內存中的實體,直到重新連接並保存。

謝謝

+0

這似乎是與我的問題類似的問題:http://stackoverflow.com/questions/11353582/delete-associated-records-when-model-is-saved – iblue 2012-07-06 22:29:08

+0

它不違反RoR:has_many邏輯? – 2013-05-04 00:00:16

回答

2

您是否嘗試過使用task_ids屬性呢?

你的代碼更改爲:

Project.tasks_ids = [] 
Project.tasks_ids << task1.id 
Project.tasks_ids << task2.id 

我知道這個問題是有點老了,但因爲我試圖尋找在谷歌類似的問題,我想這可能是別人有用。

相關問題