问题描述
|
我正在使用Rails 3中的联系人数据库。
真正令人沮丧的一件事是家庭关系代码的丑陋程度。
有没有在轨道上这样做的干净方法?
基本上所有联系人都属于联系人类别(如图!)
并且联系人有很多家庭关系(另一个模型)
以及通过family_relationships建立的许多亲戚。.家庭关系模型还具有一种家庭关系类型(另一种模型)
到目前为止,我已经使用http://railscasts.com/episodes/163-self-referential-association(使用逆向关系等)中的方法来实现了这一点。
但是,这只是感觉不太干净..如果我想让所有联系人的亲戚,关系等等。我必须删除原始sql或加入数组。
是否有更好的(或确定的)方式可以在Rails中完成这种工作?
解决方法
祖先的宝石似乎完全解决了此类问题:
祖先是一个gem / plugin,它允许将Ruby on Rails ActiveRecord模型的记录组织为树结构(或层次结构)。它使用单个,直观格式化的数据库列,并使用了物化路径模式的变体。它公开了所有标准的树结构关系(祖先,父,根,子,兄弟,后代),所有这些都可以在单个sql查询中获取。附加功能包括STI支持,范围,深度缓存,深度约束,从较早的插件/宝石的轻松迁移,完整性检查,完整性恢复,将(子)树排列为散列以及用于处理孤立记录的不同策略。