如何在rails 3中建立家庭关系?

时间:2011-05-30 12:31:19

标签: sql ruby-on-rails ruby-on-rails-3 self-reference

我正在使用rails 3中的联系人数据库。

真正令人沮丧的一件事是家庭关系代码是多么丑陋......

在轨道上有这种干净的方法吗?

基本上所有联系人都是联系人类(请参见图!)

联系人有很多家庭关系(另一种模式) 家庭关系模型也有一种家庭关系类型(另一种模式)

到目前为止,我已经使用http://railscasts.com/episodes/163-self-referential-association中的方法实现了这一点(使用反向关系等)。

但这只是感觉不干净..如果我想得到所有的联系人亲戚,关系等..我必须放弃原始SQL或加入数组..

有没有更好的(或确定的)方式在轨道上完成这种事情?

1 个答案:

答案 0 :(得分:4)

Ancestry宝石似乎正好解决了这类问题:

  

Ancestry是一个gem /插件,它允许将Ruby on Rails ActiveRecord模型的记录组织为树结构(或层次结构)。它使用单个,直观格式化的数据库列,使用物化路径模式的变体。它公开了所有标准的树结构关系(祖先,父,根,子,兄弟,后代),并且所有这些关系都可以在单个sql查询中获取。其他功能包括STI支持,范围,深度缓存,深度限制,从旧插件/宝石的轻松迁移,完整性检查,完整性恢复,(子)树到哈希的安排以及处理孤立记录的不同策略。