Ruby on Rails のガイドと、ポリモーフィック アソシエーションに関する質問に対するスタック オーバーフローの回答をいくつか読んだ後、その使用と実装は理解できましたが、特定の使用シナリオについて質問があります。複数の、、およびその他のさまざまなモデル (さまざまな もあります)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
テーブルを作成し、モデル内および他のモデル:conditions
内で使用して関連付けを強制することを計画していました。Tag
これを行うレールの方法はありますか?ありがとう!(rails 3.0.9 & ruby 1.8.7 で動作 <-デプロイメント サーバーがまだ 1.8.7 を使用しているため)
更新: ありがとうデルバ! 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
更新:双方向の HABTM が必要なため、個々のテーブルの作成に戻りました。