ActiveRecord中的一个对象相当于数据库中表的一行,对象的属性对应于表的列,ActiveRecord在运行时来确定这些对应关系 。
我们的orders表可能使用下面的sql来创建:
create table orders (
id int not null auto_increment,
name varchar(100) not null,
email varchar(255) not null,
address text not null,
pay_type char(10) not null,
shipped_at datetime null,
primary key (id)
);
我们可以创建一个类来转换这个表:
class Order < ActiveRecord::Base
end
当我们创建了Order类,就可以访问它的属性来获取信息,下面的代码使用columns()方法,来返回一个Columns对象的数组,在这里
,我们显示了orders表中的每个列,并且显示指定字段的详细信息。
puts Order.columns.map { |col| col.name }
puts Order.columns_hash['shipped_at']
运行代码,会得到下面的输出:
["id", "name", "email", "address", "pay_type", "shipped_at"]
@default=nil,
@limit=nil,
@name="shipped_at",
@type=:datetime>
注意,Active Record决定了每个列的类型,在这个例子里,将shipped_at列作为datetime类型,该列的值被保存在一个ruby的Time
类型的对象中,我们可以写些代码来验证该列的类型及其内容:
order = Order.new
order.shipped_at = "2005-03-04 12:34"
puts order.shipped_at.class
puts order.shipped_at
输出为:
Time
Fri Mar 04 12:34:00 CST 2010
下面的列表展示了sql和ruby间的数据类型对应关系:
SQLType Ruby Class
int, integer Fixnum
decimal, numeric Float
clob, blob, text String
interval, date Date
float, double Float
char, varchar, string String
datetime, time Time