2013-07-23 2 views
0

У меня есть модель owner, которая сохраняет сериализованный массив объектов item в текстовое поле в базе данных. Я могу добавить элементы в этот массив достаточно легко, но когда я хочу его удалить, я не могу, потому что для каждого объекта нет уникального идентификатора.Добавить уникальные идентификаторы для сериализованных объектов

Есть ли доступный подход к решению этого вопроса или мне нужно реализовать какой-то уникальный генератор идентификаторов?

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

Пошел с добавлением случайного ключа к каждому объекту в методе initialize.

def initialize(options = {}) 
    self.filterid = SecureRandom.base64(32) 
    ... 
end 
Смежные вопросы