这有点棘手,所以如果您需要更多信息,请不要犹豫!
我有两个模型,Store
和Consumer
通过两种方式链接:
1 / Store
和Consumer
继承自同一型号Profile
,因为它们共享许多属性(名称,位置,电子邮件,网页等)。这是Rails AR代码:
class Profile << ActiveRecord::Base
# Attributes and validation rules go here.
end
class Store << Profile
end
class Consumer << Profile
end
这是众所周知的单表继承(STI)。
2 /除了STI之外,Store
和Consumer
由多对多关系链接:
商店有很多客户(很多消费者)
消费者是许多商店的客户
因为我需要更多的链接属性(Store - Consumer),我必须创建一个额外的模型来链接它们:Client
。
以下是我的最终AR模型:
class Profile << ActiveRecord::Base
# Attributes and validation rules go here.
end
class Store << Profile
has_many :clients
end
class Consumer << Profile
has_many :clients
end
class Client << ActiveRecord::Base
belongs_to :store
belongs_to :consumer
end
问题
使用STI不会创建store_id和consumer_id ......我们只有profile_id(因为一个真实的表Profile
)。那么,我如何定位具有store_id和client_id的正确Client
行?
知道怎么做吗?提前谢谢。
答案 0 :(得分:3)
我认为你想做的就是这样。另外,我同意Daniel Wright的评论。
class Profile << ActiveRecord::Base
belongs_to :store
belongs_to :consumer
end
class Store << ActiveRecord::Base
has_one :profile
has_many :clients
has_many :consumers, :through => :clients
end
class Consumer << ActiveRecord::Base
has_one :profile
has_many :clients
has_many :stores, :through => :clients
end
class Client << ActiveRecord::Base
belongs_to :store
belongs_to :consumer
end
但是如果你想让它与你拥有的东西一起工作,你可以做类似的事情:
class Profile << ActiveRecord::Base
end
class Store << Profile
has_many :clients, :foreign_key => 'store_id'
has_many :consumers, :through => :clients
end
class Consumer << Profile
has_many :clients, :foreign_key => 'consumer_id'
has_many :stores, :through => :clients
end
class Client << ActiveRecord::Base
belongs_to :store
belongs_to :consumer
end