Acts_as_tree - 一对多:显示与父页面上的子项相关联的记录

时间:2009-11-06 16:45:42

标签: ruby-on-rails one-to-many acts-as-tree

我有一个相对简单的一对多关系,并使用acts_as_tree在视图中组织它。它看起来像这样:

Root

  |_Product 1
  |_Product 2
  |_Category 1.1

        |_Product 3
        |_Product 4
        |_Category 1.1.1

               |_Product 5

我设置的方式是我在该类别的“show”操作中列出产品。 但是我似乎无法弄清楚如何展示:产品1-5在第1类'show',第1.1类产品3-5等等......

有没有人有提示,我可以从哪里拿起来?

谢谢! 瓦尔

3 个答案:

答案 0 :(得分:1)

如果您使用的是awesome_nested_set(推荐,我这样做),那么您可以这样做:

如果产品属于类别:

class Category < ActiveRecord::Base
    def products_in_tree
        Product.all(:joins => :category, :conditions => ['categories.lft >= ? and categories.rgt <= ?', left, right])
    end
end

如果Product has_and_belongs_to_many Category(或has_many:through),请将:join更改为:categories。

答案 1 :(得分:0)

如果要以可接受的性能解决此问题,则需要使用嵌套集(即,避免大量单独的数据库查找来编译列表)。

Rails过去常常将_作为_ nested_set内置,而explanation of how it works仍然非常好并且非常有效。今天,您必须将其用作plugin

但是,默认的Rails插件不是很好,这就是为什么要制作其他几个插件的原因。我建议你使用Awesome Nested Set,我已经用它来获得令人满意的结果。

嵌套集可能有点难以理解,但希望第一个链接和其他自述文件将向您解释。

答案 2 :(得分:0)

当您需要在一个SQL查询中获取所有后代时,您还可以查看最新的ancestry gem以获得高性能。