Activerecord 将relationship设置为nil会导致立即持久性
为什么应收账款设计为在关系更改后立即保留对关系的更改,而不是等待保存操作?(第3.1.4条) 考虑以下书籍和作者模型:Activerecord 将relationship设置为nil会导致立即持久性,activerecord,Activerecord,为什么应收账款设计为在关系更改后立即保留对关系的更改,而不是等待保存操作?(第3.1.4条) 考虑以下书籍和作者模型: class Book < ActiveRecord::Base has_one :author end class Author < ActiveRecord::Base belongs_to :book end 获取书籍时,可以调整标题,在调用book.save之前不会保留任何内容 但是,当您尝试调整与作者的关系(例如,将其设置为nil)时,act
class Book < ActiveRecord::Base
has_one :author
end
class Author < ActiveRecord::Base
belongs_to :book
end
获取书籍时,可以调整标题,在调用book.save之前不会保留任何内容
但是,当您尝试调整与作者的关系(例如,将其设置为nil)时,activerecord会立即保持更改
这似乎是在中设计的,并且被其他类似A/R的实现(如mongoid)重复。为什么A/R设计为在关系更改后立即保留对关系的更改,而不是等待保存操作?因此,如果您在“一对一关联”下签出,它会声明:
- 将对象指定给has_one关联会自动保存该对象和被替换的对象(如果有),以便更新其外键-除非父对象未保存(新记录?==true)
- 将对象分配给“所属对象”关联不会保存该对象,因为外键字段属于父对象。它也不会保存父对象
作者
记录,而不是书籍
记录。因此,即使调用@Book.save
它也不会更改关系状态(因为作者
持有外键)
如果要等到@book.save
保存@book.author
时,则@book
对象必须保持旧作者的状态,以删除图书id
,以及新作者的状态,以设置图书id
a = Author.new(:name => "Joe Author")
Book.create(:title => "The Book Title", :author => a)