У меня есть модель 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
Любые предложения приветствуются.
Вы не можете использовать ассоциацию вместо этого? Сериализация хороша для небольших переменных (массив, хэш) не для записей – Benj