我正在使用rails 3中的联系人数据库。
真正令人沮丧的一件事是家庭关系代码是多么丑陋......
在轨道上有这种干净的方法吗?
基本上所有联系人都是联系人类(请参见图!)
联系人有很多家庭关系(另一种模式) 家庭关系模型也有一种家庭关系类型(另一种模式)
到目前为止,我已经使用http://railscasts.com/episodes/163-self-referential-association中的方法实现了这一点(使用反向关系等)。
但这只是感觉不干净..如果我想得到所有的联系人亲戚,关系等..我必须放弃原始SQL或加入数组..
有没有更好的(或确定的)方式在轨道上完成这种事情?
答案 0 :(得分:4)
Ancestry宝石似乎正好解决了这类问题:
Ancestry是一个gem /插件,它允许将Ruby on Rails ActiveRecord模型的记录组织为树结构(或层次结构)。它使用单个,直观格式化的数据库列,使用物化路径模式的变体。它公开了所有标准的树结构关系(祖先,父,根,子,兄弟,后代),并且所有这些关系都可以在单个sql查询中获取。其他功能包括STI支持,范围,深度缓存,深度限制,从旧插件/宝石的轻松迁移,完整性检查,完整性恢复,(子)树到哈希的安排以及处理孤立记录的不同策略。