Rails ActiveRecord模型链接列表

时间:2012-07-04 16:10:35

标签: ruby-on-rails ruby-on-rails-3 activerecord linked-list

在密集的谷歌搜索之后,我现在将陈述一个似乎不经常发生但仍然非常基本的问题。活动记录中的链接列表。就我而言,我们在模型中需要两个关联:

class Child < ActiveRecord::Base
  belongs_to :parent
  belongs_to :next, :class_name => 'Child', :foreign_key => 'next_id'
  belongs_to :previous, :class_name => 'Child', :foreign_key => 'previous_id'
end

所以现在我们可以得到父母的所有孩子:

children = Child.where("parent_id = ?", parent_id)

现在问题是:我当然希望通过一个查询从数据库中获取所有孩子,但我也希望以链接顺序查看子项,这意味着第一个将是具有前一个属性的子项nil,下一个子将是由第一个下一个属性连接的那个,依此类推,直到下一个属性为零。 有可能这样做,还是我需要查询第一个孩子,然后从孩子到孩子而不“预先”?

2 个答案:

答案 0 :(得分:3)

resortranked-model宝石是其他选择。 第一个使用类似于链表的方法。第二个使用位置属性。

答案 1 :(得分:1)

您应该使用Rails acts_as_list gem。它将项目的位置存储在列表中,甚至将范围存储到列表和belongs_to的父对象。通过允许您查询所有元素然后对它们进行正确排序,它也可以解决这个问题。