对数据表最经常的操作,无非就是CRUD(创建、读取、更新、删除)。单纯用Sql来实现,一点也不难。但是一个网站往往需要很多Sql语句,散落在各个角落,反复敲打长长的Sql语句,很可能会出错。Sql若出错,后果很严重啊。还有,所谓入乡随俗,本来满脑子在围着OO转,却不得不一次次以字符串形式跟数据库打交道。总之,Sql语句在OO的程序里,是个大鸡肋。
Rails为此引入了ORM(对象/关系映射)。ORM的任务是完成“对象应用程序和关系型数据库内表格的行、列之间的转换”。Rails把转换成对象的表格称之为Model(模型)。转换规则如下:

回到第一节的那个例子:“在http://my.example.com网站里,显示id编号为1的网志”。Rails识别URL后调用控制器blog及它的方法show(1),而show是这样定义的:
def show
@blog=Blog.find(:id)
end
这里的Blog先被声明为模型的类。整个表达式的意思是:show将会传进来一个作为id的参数,然后在与Blog相映射的数据表里读取id为1的记录,把记录里所有字段的值都传给全局变量@blog。
瞧,一句Sql语句都没有,就完成了读取的任务,与此同时突出了业务规则,而不是教数据库如何操作。这是ORM的第二个好处,当散落在各个角落的Sql,全都变成了业务逻辑时,就能很容易理解当初写为何要这些代码,以及它们是否与改进后的业务规则相匹配。网站的可维护性得到了保障。
世间万物都是把两刃刀,没有绝对的好与坏。自ORM诞生之日起,争论就不曾休止过。它归根结底还是要转换成Sql语言,才能与数据库打交道。程序员是否该把控制权交给ORM,而不管网站的运作效率呢?
Rails之所以能在短时间里火爆,其中一个重要的因素就是它以人为本,只要程序员编程时效率高,心情好,其余的都可以妥协。在这头三篇提及的控制器、视图、模型(简称MVC)也不是Rails首创的,甚至可以说,Rails就是一个大抄家,但是它却抄出了“四库全书”这样的丰功伟绩。