通过has_many关联禁用自动保存 - 断开ActiveRecord实体与会话的连接

ian*_*zer 5 activerecord autosave ruby-on-rails has-many

Ruby on Rails的默认行为是保存对集合关联所做的更改.有没有办法改变这种行为,这样我就可以修改内存中的集合,而无需将更改写入数据库.

所以如果我有两个班:

class Project < ActiveRecord::Base
  has_many :tasks

class Task < ActiveRecord::Base
  belongs_to :project
Run Code Online (Sandbox Code Playgroud)

并写一些代码,如:

Project.tasks.clear
Project.tasks << task1
Project.tasks << task2
Run Code Online (Sandbox Code Playgroud)

然后它会自动删除与项目关联的所有任务,并自动将更改写入数据库.

这是我想要实现的一个人为的例子.我知道我可以使用Project.tasks.build()将新任务添加到集合中,而不会自动保存,但我添加的任务不是新任务.它们是指定一组有限任务的链接在db.您可以将它们视为任务枚举中的条目.另外Project.tasks.clear立即命中数据库.

在java世界中,使用Hibernate,我会断开实体与会话的连接,并能够修改内存中的实体,直到重新连接和保存.

谢谢

hel*_*lva 2

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

将您的代码更改为:

Project.tasks_ids = []
Project.tasks_ids << task1.id
Project.tasks_ids << task2.id
Run Code Online (Sandbox Code Playgroud)

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