Ruby on Rails,ActiveRecord和ActiveRelation
MVC架构中的Model层负责接受Controller收集的请求参数信息,一般来说去干两件事情。
- 将Controller从View收集到的页面数据按照业务需求转化为实体对象之间的关系保存到关系数据库中。
- 以Controller传递过来的参数作为条件,根据应用业务逻辑从关系数据库中获取数据转换为实体对象,计算它们之间的关系,将计算结果反送给Controller转交给View显示。
对于在面向对象思想武装下的Model层来说,无论哪个哪种处理,都免不了关系数据库记录与实体对象之间的转化这个过程。
其中最最常用的就是持久化对象的基本操作:创建、更新、查询、删除(CURD)。在Rails中进行实体对象的增删改查就不得不提到ActiveRecord,在介绍ActiveRecord之前要先对active record这个概念加以了解。
active record,注意是小写而且是两个单词。是一种编程模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。这使得我们能够方便地将数据库中的记录转化为实体对象,或将实体对象持久化到数据库中,以便业务代码中处理实体对象之间的关系而不再是数据库表记录之间的关系。其实任何关系数据库与面向对象语言交互的场景下都可以使用这种思想而不局限于某种编程语言。
ActiveRecord,一个单词。是Rails对于这种模式的一种实现,以便我们更快速的实现对象在关系数据库中的持久化开发工作。业务中的实体类继承ActiveRecord,便能方便的将数据库中的记录与实体对象之间进行转换。更近一步,ActiveRecord是一种能够让你的实体对象变“聪明”的帮手,它能够根据自己的结构推知当前的数据库结构并能够和其交互以达到对象的增删改查。
比如说,对于某一个继承了ActiveRecord的User对象来说增删改查操作变得非常方便。我们一般来说都不用关心隐藏在后面的SQL语句编写工作。
#insert user=User.new user.user_name="abbuggy" user.save #update user.user_name="terry" user.save #delete user.delete
下面看看ActiveRelation,这是Rails3版本中增加入的内容,是一个对象关系算法解析器。ActiveRelation能够将复杂的查询分解为简单的逐步调用,通过一系列基于上一次调用的结果上的调用完成复杂的查询,而不用去关心具体的SQL语句编写工作。大多数情况下ActionRelation是隐藏在幕后的,不被我们直接使用,我们能看到的只是对于ActionRecord的操作。
下面的操作先取出Users中所有email为“”的对象列表,之后再将这些对象按照name进行升序排列。SQL语句对我们使用来说是完全透明的。
users=User.where(:email=>"") users=users.order("name ASC").limit(5)