我需要使用 rails/activerecord 对多达 5 或 6 代马的血统进行建模。我在这里对堆栈和网络进行了研究,并最终将这篇文章作为我的方法的基础。这就是我想出的。
两种型号:
Horse has the following attributes id and horse_name
Pedigree has: id, parent_id and horse_id.
以及以下关联:
has_many :parent_horse_relationships, :class_name => "Pedigree", :foreign_key => :horse_id, :dependent => :destroy
has_one :sire_horse_relationship, :class_name => "Pedigree", :foreign_key => :horse_id, :conditions => "horse_gender = 'Male'
has_one :dam_horse_relationship, :class_name => "Pedigree", :foreign_key => :horse_id, :conditions => "horse_gender = 'Female'
has_many :parents, :through => :parent_horse_relationships, :source => :parent
has_one :sire, :through => :sire_horse_relationship,:source => :parent
has_one :dam, :through => :dam_horse_relationship,:source => :parent
has_many :horse_parent_relationships, :class_name => "Pedigree", :foreign_key => :parent_id, :dependent => :destroy
has_many :progenies, :through => :horse_parent_relationships, :source => :horse
这种方法很接近,但似乎我的条件是确定母马或父系适用于马而不是父母。因此,如果特定的马是雄性,则 horse.sire 会工作,但 horse.dam 不会,反之亦然。一旦我的基本功能正常工作,我想添加额外的方法来获取整个谱系、祖父母、兄弟姐妹、后代等。
问题:
我如何将性别条件应用于父母而不是马,以便父亲和母亲都起作用。
我采取的方法是可行的,还是有更优雅、更有效的方法来实现这一点。
任何其他建议或指导将不胜感激。
很抱歉这个问题很长,感谢您的帮助。