1

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

  |_Product 1
  |_Product 2
  |_Category 1.1

        |_Product 3
        |_Product 4
        |_Category 1.1.1

               |_Product 5

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

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

谢谢!瓦尔

4

3 回答 3

1

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

如果产品属于_to 类别:

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

如果产品 has_and_belongs_to_many 类别(或 has_many :through),将 :join 更改为 :categories。

于 2009-11-06T19:24:56.557 回答
0

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

Rails 曾经内置了 _ as _ nested_set ,对其工作原理的解释仍然非常好并且非常有效。今天你必须使用它作为插件

但是,默认的 Rails 插件不是很好,这就是制作其他几个插件的原因。我会推荐你​​使用Awesome Nested Set,我自己用过,结果很满意。

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

于 2009-11-06T17:09:12.387 回答
0

当需要在一个 SQL 查询中获取所有后代时,您还可以查看最近为高性能而设计的祖先gem。

于 2009-11-08T05:50:03.173 回答