在我的应用程序中,我有7个型号。我希望这样做,以便用户可以使用2种不同类型的标签来标记3种不同的模型。用户也属于所有这些模型。
User
2个标记模型为Dog
和Cat
可以包含代码的3个模型是Store
,Farm
,House
比我有Tagging
模型来制作连接表所以它是多对多的,因为我希望能够将Cat分配到商店,农场或商店。
我想知道下面的内容是否适合这种情况。我应该为每种类型的Tagging
添加一个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
答案 0 :(得分:1)
似乎动物是标签的真正所有者。当看到动物归用户所有时,将用户与标签相关联似乎是多余的。
看作标签只能由猫或狗拥有,将两者都称为外键似乎不直观。如果你以后再加一只兔子,你会再做一次关联吗?我会探索一种多态解决方案,其中标签属于动物。这将自动消除属于猫和狗的一个标签的担忧。