程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Ruby on rails開發從頭來(三十八)- ActiveRecord基礎(列和屬性)

Ruby on rails開發從頭來(三十八)- ActiveRecord基礎(列和屬性)

編輯:關於JAVA

ActiveRecord中的一個對象相當於數據庫中表的一行,對象的屬性對應於表的列,也許你會注意到我們的Order類沒有提及關於orders表的任何東西,這是因為ActiveRecord在運行時來確定這些對應關系,Active Record將數據庫中的模式反應到類中。

我們的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)
);

我們可以創建一個類來轉換這個表:

require 'rubygems'
require_gem 'activerecord'
# Connection code omitted...
class 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類型,該列的值被保存在一個ruby的Time類型的對象中,我們可以寫些代碼來驗證該列的類型及其內容:

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

輸出為:

Time
Fri Mar 04 12:34:00 CST 2005

下面的列表展示了sql和ruby間的數據類型對應關系:

SQLType      Ruby Class   SQLType         Ruby Class
int, integer    Fixnum      float, double      Float
decimal, numeric  Float      char, varchar, string  String
clob, blob, text  String      datetime, time     Time
interval, date   Date       Boolean         後面詳細介紹

有一個潛在的可能是關於decimal的,在數據庫裡,使用decimal的列來存儲number和fix number型,Active Record將decimal映射成Float類的對象,盡管這樣可以應用於大多數應用,浮點數是不精確的,在對這一類型的屬性進行一系列操作的時候,可能會發生捨入的錯誤,你也許可以使用integer類型來作為替代方案,例如,存儲貨幣型的時候可以將元,角,分,分別存入不同的字段。做為一種選擇,你可以使用聚合(aggregations),使用多個分開的字段來構建貨幣類型。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved