rubyonrails:Ruby on rails开发从头来( 3十 8)- ActiveRecord基础(列和属性)

  ActiveRecord中个对象相当于数据库中表对象属性对应于表也许你会注意到我们Order类没有提及有关orders表任何东西这是ActiveRecord在运行时来确定这些对应关系Active Record将数据库中模式反应到类中   我们orders表可能使用下面sql来创建:

create table orders (
id 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)
);


  我们可以创建个类来转换这个表:

require 'rubygems'
require_gem 'activerecord'
# Connection code omitted...
Order < ActiveRecord::Base
end


  当我们创建了Order类就可以访问它属性来获取信息下面代码使用columns思路方法来返回个Columns对象在这里我们显示了orders表中每个列并且显示指定字段详细信息

require 'pp'
pp Order.columns.map { |col| col.name }
pp Order.columns_hash['shipped_at']


  运行代码会得到下面输出:

["id", "name", "email", "address", "pay_type", "shipped_at"]
#<ActiveRecord::ConnectionAdapters::Column:0x10e4a50
@default=nil,
@limit=nil,
@name="shipped_at",
@type=:datetime>


  注意Active Record决定了每个列类型在这个例子里将shipped_at列作为datetime类型该列值被保存在个rubyTime类型对象中我们可以写些代码来验证该列类型及其内容:

order = Order.
order.shipped_at = "2005-03-04 12:34"
pp order.shipped_at.
pp order.shipped_at


  输出为:

Time
Fri Mar 04 12:34:00 CST 2005


  下面列表展示了sql和ruby间数据类型对应关系:

SQLType      Ruby Class   SQLType         Ruby Class
, eger    Fixnum      float, double      Float
decimal, numeric  Float      char, varchar,   String
clob, blob, text  String      datetime, time     Time
erval, date   Date       Boolean         后面详细介绍


  有个潜在可能是有关decimal在数据库里使用decimal列来存储number和fix number型Active Record将decimal映射成Float类对象尽管这样可以应用于大多数应用浮点数是不精确在对这类型属性进行系列操作时候可能会发生舍入你也许可以使用eger类型来作为替代方案例如存储货币型时候可以将元分别存入区别字段做为种选择你可以使用聚合(aggregations)使用多个分开字段来构建货币类型

Tags:  rubyonrails安装 rubyrails rubyonrails教程 rubyonrails

延伸阅读

最新评论

发表评论