問題は、Ruby on Rails の関連付けで多重度をどのように表現するかです。CollectionとItemの 2 つのモデルがあるとします。それらはhas_and_belongs_to_many関係にあります。コレクションにアイテムの同一のインスタンスが複数含まれている場合 (たとえば、10 個の同一のアイテムが含まれている場合)、どうすればよいですか?
has_many :through を試してみましたが、あまり良いアプローチではないようです。
問題は、Ruby on Rails の関連付けで多重度をどのように表現するかです。CollectionとItemの 2 つのモデルがあるとします。それらはhas_and_belongs_to_many関係にあります。コレクションにアイテムの同一のインスタンスが複数含まれている場合 (たとえば、10 個の同一のアイテムが含まれている場合)、どうすればよいですか?
has_many :through を試してみましたが、あまり良いアプローチではないようです。
最初に、多重度を表すために重複するDB レコードがある単なる 1 対多ではなく、多対多の関係が本当に必要であることを明確にしたいと思います。よろしければ、items
必要な回数だけレコードを複製し、collection_id
外部キーを適切なCollection
レコードに向けることができるからです。
それがあなたの望むものではなく、あなたが本当に多重度を望んでいるなら、私はこれを行うために ActiveRecord アソシエーションを使用しません。オブジェクトの配列またはリストをitem_ids
格納Collection
し、この配列をデータベース内の文字列またはテキスト フィールドにシリアライズ/デシリアライズします。
collection.item_ids
=> [2, 3, 1, 1, 2, 1, 2, 2, 2, 2, 5, 6, 2, 3, 2]
属性の各エントリはテーブルitem_ids
への外部キーです。items
たまたま Postgres を DB として使用している場合は、リスト/配列をPostgres array
columnとして実際に保存できると思いますが、Rails で実際にこれを実行しようとしたことはありません。