Virgin STI帮助

时间:2010-03-21 16:24:40

标签: ruby-on-rails activerecord single-table-inheritance

我正在进行赛马应用,我正在尝试利用STI来模拟马的连接。马的关系由他的主人,教练和骑师组成。随着时间的推移,连接可能会因各种原因而发生变化:

  1. 这匹马卖给了另一位老板
  2. 所有者切换培训师或骑师
  3. 这匹马是由新主人声称的
  4. 就目前而言,我已使用以下表格对此进行建模:

    1. 连接(连接表)
    2. 利益相关者(利益相关者有三个子类:赛马,培训师和所有者)
    3. 以下是我的作品和协会:

          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列。

      我是否已正确建模。是否有更好/更优雅的方法。在此先感谢您的反馈。

      吉姆

2 个答案:

答案 0 :(得分:2)

请参阅this document有关在rails项目中使用STI的信息。关于连接 - 多态关联是你最好的选择。

答案 1 :(得分:0)

首先我要说,我不知道STI是什么。缩写代表什么?

我不明白你为什么需要连接模型。根据我对您的域名的理解,您可以放弃连接,不需要使用:through。这将使其更简单并提高性能。我没有看到连接模型添加的任何功能。