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,我會斷開實體與會話的連接,並能夠修改內存中的實體,直到重新連接並保存。
謝謝
這似乎是與我的問題類似的問題:http://stackoverflow.com/questions/11353582/delete-associated-records-when-model-is-saved – iblue 2012-07-06 22:29:08
它不違反RoR:has_many邏輯? – 2013-05-04 00:00:16