【发布时间】:2012-07-06 11:51:17
【问题描述】:
Ruby on Rails 的默认行为是保存对集合关联所做的更改。 有什么办法可以改变这种行为,这样我就可以修改内存中的集合,而无需将更改写入数据库。
所以如果我有两个班级:
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 会立即命中数据库。
在 java 世界中,使用 Hibernate,我会断开实体与会话的连接,并能够修改内存中的实体,直到重新连接并保存。
谢谢
【问题讨论】:
-
这似乎与我的问题类似:stackoverflow.com/questions/11353582/…
-
不违反 RoR :has_many 逻辑吗?
标签: ruby-on-rails activerecord has-many autosave