Welcome 微信登录

首页 / 软件开发 / JAVA / Ruby on rails开发从头来(五十五)- ActiveRecord基础(一对一关联关系)

Ruby on rails开发从头来(五十五)- ActiveRecord基础(一对一关联关系)2011-12-04 博客园 Cure一对一关联,或者更正确的说是一对零或一对一关联,是通过外键引用到另外一张表中的至多一条记录实现的,下图描述了orders表和invoices表的关系:

在Active Record中,要表示这样的关系需要在Order类中添加has_one:Invoice声明,并且同时在Invoice类中添加声明belongs_to:order,事实上,我们可以把这种关联关系看作是相互的,我们可以使Invoice有一个Order,也可以使Order有一个Invoice,不同的是,在将对象存储到数据库时,如果我们给一个对象赋予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
还有另外一个不同点,当你给一个对象赋予has_one关联时,如果指向一个既存的子对象,这个既存对象的外键关联将会被移除,也就是清零,如下图: