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

Ruby on rails開發從頭來(四十一)- ActiveRecord基礎(存儲結構化數據)

編輯:關於JAVA

有時,能夠在某個屬性中直接存儲任意的ruby對象是很方便的,一種辦法就是Active Record支持序列化,將一個ruby對象變為一個YMAL字符串,並且將這個字符串存儲到屬性對應的數據庫字段中。在數據庫定義中,這個字段必須為text類型。

因為Active Record將數據庫中的Char型和text型映射為ruby的string型,所以如果我們需要告訴Active Record使用序列化功能,例如,我們想知道某個客戶進行的最後的5次消費,我們創建一個含有text類型字段的表來保存信息:

create table purchases (
id int not null auto_increment,
name varchar(100) not null,
last_five text,
primary key (id)
);

在轉換這個表的Active Record類中,我們要使用serialize()聲明,來告訴Active Record要排列對象:

class Purchase < ActiveRecord::Base
serialize :last_five
# ...
end

當我們創建了一個新的Purchase對象,我們可以給last_five列賦任何值,在這個例子裡,我們給last_five列設置一個字符串數組,

purchase = Purchase.new
purchase.name = "Dave Thomas"
purchase.last_five = [ 'shoes', 'shirt', 'socks', 'ski mask', 'shorts' ]
purchase.save

當我們讀入它的時候,這個屬性已經被設置為數組:

purchase = Purchase.find_by_name("Dave Thomas")
pp purchase.last_five
pp purchase.last_five[3]

代碼的輸出為:

["shoes", "shirt", "socks", "ski mask", "shorts"]
"ski mask"

盡管這個功能是很強大且便利的,但是只有當你不打算在ruby以外的項目中使用這些序列化的信息,除非那個程序也能夠使用YMAL格式。特別是,這些信息很難被SQL查詢所利用,你也許會考慮使用聚合(aggregation)來替代,在後面我們會介紹這種辦法來達到相同的效果。

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