Ruby on rails 维珍STI帮助

Ruby on rails 维珍STI帮助,ruby-on-rails,activerecord,single-table-inheritance,Ruby On Rails,Activerecord,Single Table Inheritance,我正在开发一个赛马应用程序,我正试图利用STI来模拟马的连接。马的关系由主人、驯马师和骑师组成。随着时间的推移,连接可能会因各种原因发生变化: 这匹马被卖给了另一个主人 主人换了教练或骑师 这匹马被新主人认领了 目前,我已使用以下表格对此模型进行了建模: 马 连接(联接表) 利益相关者(利益相关者有三个子类:骑师、培训师和所有者) 以下是我的分类和关联: class Horse < ActiveRecord::Base has_one :connection has

我正在开发一个赛马应用程序,我正试图利用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
    
    class Horse:连接
    拥有一个:骑师\u涉众,:通过=>:连接
    有一个:培训师\u利益相关者,:通过=>:连接
    结束
    类连接:连接
    结束
    类所有者<利益相关者
    #这里有特定于所有者的代码。
    结束
    班级骑师
    #骑师专用代码在这里。
    结束
    班级培训师<利益相关者
    #培训师特定代码在这里。
    结束
    
    在数据库一端,我在connections表中插入了一个Type列

    我的模型是否正确。是否有更好/更优雅的方法。提前感谢您的反馈


    吉姆首先我得说,我不知道STI是什么。缩写代表什么


    我不明白你为什么需要连接模型。就我对您的域的理解而言,您可以离开连接,而不需要使用:through。这将使它更简单并提高性能。我看不到连接模型添加的任何功能。

    请参考rails项目中使用STI的相关信息。关于连接-多态关联是您最好的选择。

    STI=单表继承谢谢您的回答。我的意图是抓住马匹周围的“队伍”。我还打算跟踪/分析连接中的变化及其结果。更新:我已经很清楚了,但我正在接近。在研究这个话题时,我偶然发现了这篇文章,我认为其他人可能会感兴趣。谢谢我要看一下文件。你有什么意见或见解愿意与我分享吗。非常感谢。艾曼塔斯,再次感谢你的文档链接。我只是把它和所有的评论通读了一遍。我必须承认我倾向于站在那些不认为性传播感染是邪恶的人一边。在我的项目中,非STI方法将产生三个具有相同列的表。这也意味着在整个项目中我会有更多的外键引用。也就是说,我对这一点非常陌生,我感谢你的意见。其他人愿意提供意见或分享一些经验。