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

來源:互聯網
上載者:User

有時,能夠在某個屬性中直接儲存任意的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::Baseserialize :last_five# ...end

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

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

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

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

代碼的輸出為:

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.