Leon's Blogging

Coding blogging for hackers.

Serialize & Store 將 Object 塞在欄位裡

| Comments

當欄位上需要塞比較多 data 時就可以使用,相當便利。

Serialize 序列化

可以將一個 object 轉換成一個可被資料庫儲存及傳輸的純文字形態 反之讀出來就是,Deserialize 反序列。

serialize 可指定欄位,在存入資料庫時,就會自動序列化成YAML格式。

欄位必須是 text

1
t.text types

model

1
2
3
4
5
6
7
8
9
10
11
12
class User < ActiveRecord::Base
  serialize :types
  #若沒特別指定,任何形式都可存取
  serialize :types Array
  #指定 Array,就不能塞 Hash 進去
end

User.create(profiles: {gender: "male", phone: 12345})
User.last.profiles
#=> {gender: "male", phone: 12345}
User.last.profiles[:gender]
#=> male

缺點是 serialize 後的欄位,就無法用 where 進行查詢。

Store

上述的 profiles 可以用 store 來設定。 就像是一般的變數一樣。

欄位必須是 text

1
t.text types
1
2
3
4
5
6
7
8
9
10
11
12
13
class User < ActiveRecord::Base
  store :profiles, :accessors => [:gender, :phone]
end


User.create(gender: "male", phone: 12345)

user.profiles
#=> {:gender => "male", :phone => 12345}
user.gender
#=> "male"
user.phone
#=> 12345

官方文件:
api - serialize
apidock - serialize
api - Store

參考文件:
ActiveRecord - 進階功能

Comments