- 一个使用动态记录作父类例子
在 《Metaprogramming Ruby(Ruby元编程) 》一书中 ,开篇的介绍中,第一个小例子就是在数据库中来创建一个电影列单。作者使用了ActiveRecord(动态记录)产生一个子类Movie,神奇的是只用了寥寥代码就实现了。
出于对作者尊重,我仿照了一个例子, 来创立一个食物列单来记录家中现在都用什么食物。
Class Food < AcitveRecord::Base
end
然后在初始化中,是这样写的:
food = Food.create
food.name= "Milk "
food.name #这个是一个方法,屏幕打印出食物的名字。
- 为什么可以这么写?
这样简洁的过分的代码实在是令初学者咋舌,什么都没说就可以做事情,就算是魔法师施展魔法也得念个咒语吧。
原来,这里得益于于ruby一个的强大特性: writing code that writes code(能够生成新代码的代码)。一段ruby代码不仅可以完成自身应该的使命,也可以兼顾去指挥和帮助新的代码完成类似的任务。
举个例子,当我们使用ruby写好一段程序的时候 就像在公司中招募了一名新职员A,后来我们发现新职员A的将他分内的事情做得的确很好,但是公司职能扩大了,需要招募新新职员B来完成的一份些许类似的工作,那么在给新新职员B入职培训的时候,只需要告诉他:1,你需要向前辈A请教你该做的工作 2,我现在告诉你的是前辈A不知道的新增加的工作。
曾经看过一个观点,说代码糟糕不是因为重用而是因为重写。我想ruby这里的宗旨,应该就在于减少不必要的重写吧。
回到上面两行 字字珠玑的代码,这里面Movie需要实现的方法在ActiveRecord里面都有定义了,所以直接一个end潇洒地结束了。
那为什么还多此一举来声明一下呢,直接用AcitveRecord不就好了,问题是那样的话程序员就需要记忆一个他陌生的class,而且他无法添加自己想要的类属性,类属性的方法就无从下手。
那么我们来稍微看下ActiveRecord中具体是怎么实现这么神奇的功能的吧
- 我想试试这个代码!
接下来就是如何实现这短短的几行代码。个人建议创建一个.rb 然后在cmd中运行ruby *.rb来测试。
A 准备工作
mysql的安装
mysql connector安装 http://dev.mysql.com/downloads/connector/c/%20
gem包的安装下载
安装mysql
http://kingxss.iteye.com/blog/2014443
链接库
http://blog.csdn.net/janne09/article/details/11634699
http://www.admin10000.com/Document/114.html
active establish connection
http://apidock.com/rails/ActiveRecord/Base/establish_connection/class