我有一个相对简单的一对多关系,并使用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等等......
有没有人有提示,我可以从哪里拿起来?
谢谢! 瓦尔
答案 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以获得高性能。