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

どんな提案でも大歓迎です。

4

1 に答える 1

0

初期化メソッドで各オブジェクトにランダム キーを追加しました。

def initialize(options = {})
  self.filterid = SecureRandom.base64(32)
  ...
end
于 2013-09-23T16:54:26.537 に答える