6

经过密集的谷歌搜索后,我现在将指出一个似乎不经常发生但仍然非常基本的问题。Active Record 中的链表。就我现在而言,我们需要模型中的两个关联:

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 的孩子,下一个孩子将是由第一个下一个属性连接的那个,依此类推,直到下一个属性为零。是否可以这样做,或者我是否需要查询第一个孩子,然后在没有“预缓存”的情况下从一个孩子到另一个孩子?

4

2 回答 2

3

度假村和排名模型宝石是其他选择。第一个使用类似于链表的方法。第二个使用位置属性。

于 2013-07-12T14:55:53.703 回答
1

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

于 2012-07-04T16:20:56.040 回答