Ruby on rails Rails ActiveRecord模型链表

Ruby on rails Rails ActiveRecord模型链表,ruby-on-rails,ruby-on-rails-3,activerecord,linked-list,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

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

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
现在我想问一个问题:我当然想用一个查询从数据库中获取所有的子项,但我也想按链接顺序遍历这些子项,这意味着第一个子项将是前一个属性为nil的子项,下一个子项将是由第一个下一个属性连接的子项,依此类推,直到下一个属性为nil。
是否可以这样做,或者我是否需要查询第一个子级,然后在没有“预处理”的情况下从一个子级转到另一个子级?

您可能应该使用Rails gem。它存储项目在列表中的位置,甚至是列表和
所属的父对象的作用域。它还可以通过允许您查询所有元素,然后对它们进行正确排序来解决此问题。

和gem是其他替代方法。
第一种方法使用类似于链表的方法。第二个使用position属性。

我也想到了这个想法,但是acts\u as\u list并没有给你一个链表的主要好处——从任意位置廉价插入和删除。很高兴知道gem acts\u as\u list(因为直到现在,我都是自己实现的)但这正是我想要摆脱的。。。。如果删除一个对象,我只想更改上一个和下一个模型的属性,而不是通过数百行更改位置属性。您可以覆盖
destroy
方法,使其更新其邻居的属性。@Draiken好吧,问题仍然是,如果一个人可以从一个父母那里获取所有的孩子,然后通过链表的方式对他们进行迭代……acts_as_list有一些自述中没有提到的问题:最后我们使用了排名模型
children = Child.where("parent_id = ?", parent_id)