我正在进行赛马应用,我正在尝试利用STI来模拟马的连接。马的关系由他的主人,教练和骑师组成。随着时间的推移,连接可能会因各种原因而发生变化:
就目前而言,我已使用以下表格对此进行建模:
以下是我的作品和协会:
class Horse < ActiveRecord::Base
has_one :connection
has_one :owner_stakeholder, :through => :connection
has_one :jockey_stakeholder, :through => :connection
has_one :trainer_stakeholder, :through => :connection
end
class Connection < ActiveRecord::Base
belongs_to :horse
belongs_to :owner_stakeholder
belongs_to :jockey_stakeholder
belongs_to :trainer_stakeholder
end
class Stakeholder < ActiveRecord::Base
has_many :connections
has_many :horses, :through => :connections
end
class Owner < Stakeholder
# Owner specific code goes here.
end
class Jockey < Stakeholder
# Jockey specific code goes here.
end
class Trainer < Stakeholder
# Trainer specific code goes here.
end
一个数据库端,我在连接表中插入了一个Type列。
我是否已正确建模。是否有更好/更优雅的方法。在此先感谢您的反馈。
吉姆
答案 0 :(得分:2)
请参阅this document有关在rails项目中使用STI的信息。关于连接 - 多态关联是你最好的选择。
答案 1 :(得分:0)
首先我要说,我不知道STI是什么。缩写代表什么?
我不明白你为什么需要连接模型。根据我对您的域名的理解,您可以放弃连接,不需要使用:through。这将使其更简单并提高性能。我没有看到连接模型添加的任何功能。