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()将一个新任务添加到集合中,而不会自动保存它,但是我添加的任务不是新的tasks.They是指向在db中定义的有限任务集的链接。您可以将它们视为任务枚举中的条目。此外,Project.tasks.clear会立即命中数据库。
在java的世界里,使用Hibernate,我会断开实体与会话的连接,并且能够修改内存中的实体,直到重新连接并保存。
谢谢
发布于 2013-05-08 04:07:22
您是否尝试过改用task_ids属性?
将您的代码更改为:
Project.tasks_ids = []
Project.tasks_ids << task1.id
Project.tasks_ids << task2.id我知道这个问题有点老了,但自从我尝试在谷歌上搜索类似的问题后,我想这可能对其他人有用。
https://stackoverflow.com/questions/11361668
复制相似问题