5

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,我会断开实体与会话的连接,并能够修改内存中的实体,直到重新连接并保存。

谢谢

4

1 回答 1

2

您是否尝试过使用 task_ids 属性?

将您的代码更改为:

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

我知道这个问题有点老了,但由于我试图在谷歌上搜索类似的问题,我认为这可能对其他人有用。

于 2013-05-07T20:07:22.387 回答