私のアプリケーションには、7 つのモデルがあります。ユーザーが 2 つの異なるタイプのタグを使用して、3 つの異なるモデルに何度もタグ付けできるようにしたいと考えています。ユーザーは、これらすべてのモデルにも属しています。
のUser
2 つのタグ モデルはDog
、Cat
タグを持つことができる 3 つのモデルはStore
、、、Farm
House
結合テーブルを作成するためのTagging
モデルがあるので、猫を店、農場、または家に割り当てることができるようにしたいので、多対多です。
以下にあるものがこのシナリオの正しい方法であるかどうかを知りたいと思いました。Tagging
の種類ごとに結合テーブルを 1 つ持つか、別のテーブルを作成する必要がありTag
ますか? それは犬と猫ですか?
class User < ActiveRecord::Base
has_many :dogs
has_many :stores
has_many :houses
has_many :farms
has_many :cats
has_many :taggings
end
class Dog/Cat < ActiveRecord::Base
belongs_to :user
has_many :taggings
has_many :houses, :through => :taggings, :source => :taggable, :source_type => "House"
has_many :farms, :through => :taggings, :source => :taggable, :source_type => "Farm"
has_many :stores, :through => :taggings, :source => :taggable, :source_type => "Store"
end
class House/Farm/Store < ActiveRecord::Base
belongs_to :user
has_many :taggings
has_many :dogs, :through => :taggings, :source => :taggable, :source_type => "Dog"
has_many :cats, :through => :taggings, :source => :taggable, :source_type => "Cat"
end
class Tagging < ActiveRecord::Base
attr_accessible :taggable_id, :taggable_type
belongs_to :dog
belongs_to :cat
belongs_to :user
belongs_to :taggable, :polymorphic => true
end
# Tagging Table
create_table :taggings do |t|
t.integer :dog_id
t.integer :cat_id
t.integer :user_id
t.integer :taggable_id
t.string :taggable_type
end