2013-07-23 31 views
0

我有一個owner模型,它將一個序列化的item對象數組保存到數據庫中的文本字段。我可以很容易地向這個數組添加項目,但是當我想刪除一個時,我不能這樣做,因爲每個對象都沒有唯一的標識符。爲序列化對象添加唯一標識

是否有一個現成的方法來解決這個問題,還是我需要實現某種獨特的ID生成器?

class Owner < ActiveRecord::Base 
    serialize :items 
end 

class Item 
    attr_accessor :name 
end 

owner = Owner.new 
owner.items = [] 
owner.items << Item.new(name: 'Test') 
owner.save 

show視圖爲owner項目都列出來,我想包括remove item聯繫,但都沒有辦法確定的項目。

for each item... 
<%= link_to 'Remove Item', remove_item_path(item) %> # item won't match after owner is reloaded in the controller 

# controller 
owner = Owner.find(params[:id]) 
owner.items.delete(params[:item]) # This won't work, items have been reloaded when owner was found 

任何建議將受到歡迎。

+0

難道你不能使用關聯嗎?序列化對於小變量(數組,散列)不適用於記錄 – Benj

回答

0

在初始化方法中爲每個對象添加一個隨機鍵。

def initialize(options = {}) 
    self.filterid = SecureRandom.base64(32) 
    ... 
end