當欄位上需要塞比較多 data
時就可以使用,相當便利。
Serialize 序列化
可以將一個 object 轉換成一個可被資料庫儲存及傳輸的純文字形態
反之讀出來就是,Deserialize 反序列。
serialize
可指定欄位,在存入資料庫時,就會自動序列化成YAML格式。
欄位必須是 text
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
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 - 進階功能