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

  |_Product 1
  |_Product 2
  |_Category 1.1

        |_Product 3
        |_Product 4
        |_Category 1.1.1

               |_Product 5

我的设置方式是在类别的“显示”操作中列出产品。但是我似乎不太清楚如何显示:产品 1-5 在类别 1 的“展示”中,产品 3-5 在类别 1.1 中,依此类推...

有谁有提示,我可以从哪里获取它?

谢谢!瓦尔

有帮助吗?

解决方案

您还可以看看最近的祖先宝石高性能设计当需要让所有的后代在一个SQL查询。

其他提示

如果您使用awesome_nested_set(推荐,我),则可以做到这一点:

如果产品belongs_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:通过),改变:加入到:类别

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

Rails 曾经内置了 actions _ as _nested_set ,并且 解释它是如何工作的 仍然非常好并且相当有效。今天你必须使用它作为 插入.

然而,默认的 Rails 插件不是很好,这就是为什么制作了其他几个插件的原因。我会推荐你​​使用 很棒的嵌套集, ,我自己使用过,效果令人满意。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top