清单10:从数据库中提取所有雇员
class Employee < ActiveRecord::Base
end
emps = Employee.find(:all)
emps.each do |emp|
puts emp.name
end
如果现在运行脚本,将获得一张所有雇员的清单,如下所示:
Fred Smith
John Doe
Jane Jones
Sam Smiles
Julie Morgan
Wilma Fonda
Danielle Jamison
Michele Cannon
Lance Hanniford
Eliot Rinaggio
James Cotton
刚刚发生了什么事?让我们来看一看添加的代码:
◆前两行声明了一个名为 Employee 的类,该类是从 ActiveRecord::Base 扩展而来。
◆find 方法是 ActiveRecord::Base 附带的一种方法并且为您提供一种灵活搜索所需雇员的方法。它将返回一个匹配指定条件的雇员数组 —— 在本例中为所有雇员。
◆each 方法是 Ruby 实现迭代器范式的方法。正如您在阅读时所期望的,对于返回的每个雇员,其名称都被输出到控制台。
ActiveRecord 如何知道要连接到哪张表,或者如何知道有一个关于雇员的名称字段?这是 ActiveRecord 魔术的一部分。它使用逻辑默认值来猜测哪一张是数据库表。由于将类命名为了 Employee,因此 ActiveRecord 将默认查找名为 employees 的表。同样地,它将使用某种形式的反射来获得列名并使用这些列名作为对象的属性,除非您告诉它不这样做。
要查看 ActiveRecord 能够实现的更多功能,通过将条件添加到 find 方法中,使用本教程中较早时候提到的 PreparedStatement 语句,来添加要使用的限制,以便只返回姓名开头为 J 的雇员。要执行此操作,请将 Employee.find 行更改为 emps = Employee.find(:all, :conditions => "name like 'J%'")。