Ruby on Railsガイドと多態性関連に関する質問へのstackoverflowレスポンスのいくつかを読んだ後、その使用と実装について理解していますが、特定の使用シナリオについて質問があります。私は(もtags
を変化している)複数topics
、categories
、images
と他の様々なモデルに関連付けられているが、代わりにtags
テーブル内の参照フィールド(foreign_id
、foreign_type
)を配置することができるtags
を持って、私は別を作成することを好むだろう関連テーブル。 :polymorphic => true
を使用してもこれは可能ですか?このような別個のポリモーフィックアソシエーションテーブル
何か:
create_table :tags do |t|
t.string :name
t.remove_timestamps
end
create_table :object_tags, :id => false do |t|
t.integer :tag_id
t.references :tagable, :polymorphic => true
t.remove_timestamps
end
これが不可能な場合は、私は同じ:object_tags
テーブルを作成し、関連付けを強制的にTag
モデルと他のモデルの中:conditions
を使用して計画されました。これを行う方法はありますか?ありがとう! (レール3.0.9 &ルビー1.8.7 <での作業 - デプロイメント・サーバは、まだ1.8.7を使用しているため)
UPDATE: おかげDELBA! Answerは、HABTM多型の実用的な解決策です。
class Tag < ActiveRecord::Base
has_many :labels
end
class Label < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :tag
end
class Topic < ActiveRecord::Base
has_many :labels, :as => :taggable
has_many :tags, :through => :labels
end
create_table :tags, :timestamps => false do |t|
t.string :name
end
create_table :labels, :timestamps => false, :id => false do |t|
t.integer :tag_id
t.references :taggable, :polymorphic => true
end
UPDATE:私は双方向のHABTMを必要とするので、私は戻って個々のテーブルを作成しようとしてしまいました。
なぜこのようにしたいですか? (純粋な好奇心、判断なし) – Damien
モデルの関連ごとに別個のテーブルを作成するのではなく、 'Tag'に利用可能なすべての関連付けを持つ単一のテーブルを持つほうが効率的です。現時点では、個々の関連付けテーブルを使って設定しています。あなたの質問に答える私は本当にこの種の解決の必要性はないと認識しています。私が探しているセットアップの種類は、右のより多くのメモリを使用するだろうか? –
私は今でも意見の初めさえ持っていません。私は、多形的なやり方をするための道があるとは思わないが、明日は確かに試してみる。素晴らしい質問。アップアップされました!編集:それはあなたの質問にすることがありますが、私は答えがわからない:http://stackoverflow.com/questions/6964678/habtm-polymorphic-relationship – Damien