这几天跟着项目做下来觉得ROR一些基本的概念还是要烂熟于心的,今天我们来讨论下ActiveRecord。
跟着书上的例子,使用Scaffold(脚手架)的确方便了不少,但是对于其中的原理我却不是十分明晰,所以今天又主要研究了下 《Agile Web Application》 第四版后面的“Rails in depth” ,对ActiveRecord有了初步的认识。好了,不多说废话,进入正题~
ActiveRecord是Rails应用程序管理工具,说白了就是让开发者高度manage数据库的一个tool。 书上说它是一个ORM层(对象关系映射层),表对应类,行对应object,列对应属性。借助ActiveRecord可以操做表之间的关联,进行CRUD方法(create,read,update,delete) 十分方便。 在工程代码里(以depot :/models/order为例),我们可以看到该类继承了 ActiveRecord::Base类,这样order类中只要定义了attr_accessible,在controller里面就很方便的访问数据库中的Orders表中的数据了。当然,你也可以在model中定义方法,在controller里面调用。
我个人觉得初学ROR,给我印象最深的还是关联。ActiveRecord可以很好地帮你实现关联。它支持3种关联,一对一,一对多,和多对多。使用时必须在model中指出,has_one,has_many或者has_and_belongs_to_many。下面我们逐一讲解这三种关联:
1. 一对一关联
一对一关联,准确的说是一对一或一对零关联,实现方式就是一张表里保存另一个表的外键,引用他的记录。比方说订单和发票。在这里,要实现一对一关联,需要给订单添加has_one 声明,同时给发票添加belongs_to声明。牢记规则:在使用外键的表里,加入belongs_to声明。
2. 一对多关联
使用一对多是用来表现一组对象的。例如,一根订单可以包含多个订单项。在数据库里,订单要加上has_many声明,订单项依旧使用belongs_to.