哪种关联好?

哪种关联好?

class Invoice<ActiveRecord::Base
    belongs_to:order
end

class Order<ActiveRecord::Base
    has_one:invoice
end


唯一区别在于将对象保存到数据库的方式。如果拿一个新创建
的对象来建立has_one关联,那么被关联的对象会自动保存:
an_invoice = Invoice.new(..)
order.invoice = an_invoice  #invoice gets saved
可是,如果拿一个新创建的对象来建立belongs_to关联,它不会自动保存:
order = Order.new(..)
an_invoice.order = order # Order will not be saved

当你把一个Order对象赋给Invoice对象时,后者可以轻松地保存关联信息-反正它也要
保存别的信息,譬如说付款时间。也就是说本来要更新两次数据库,现在只要一次。
反过来,如果是把新建的Invoice对象赋给Order对象,而这个Order原本就有一个Invoice
对象,始终需要更新原本在数据库的记录,所以“在保存Order对象时自动保存表间关联"
不会带来任何额外的好处,而且如果要实现这一特性,需要编写更多的代码码,而Rails
一大目标就是少写代码。

那么到底这样建立关联好
an_invoice = Invoice.new(..)
order.invoice = an_invoice  #invoice gets saved
还是这样好呢?
order = Order.new(..)
an_invoice.order = order # Order will not be saved
引用:
当你把一个Order对象赋给Invoice对象时,后者可以轻松地保存关联信息-反正它也要
保存别的信息,譬如说付款时间。也就是说本来要更新两次数据库,现在只要一次。
如果把一个Order对象赋给Invoice对象,两者之间的关联不会被立即保存
那么不就是要自己去保存了么?
这段是Agile Web Development with Rails 上的吧。我也看过,没太深究。佩服楼主的研究精神。

其实要知道他的用处很简单,把这两段代码执行一下,再看看development.log里分别对应的SQL语句就行了。