【发布时间】:2013-08-20 07:06:23
【问题描述】:
我有两个对象,项目和分类节点。
我有一个选择的“项目”,我想根据它所附加的分类节点的字母顺序来订购,但仅限于一个特定的“顶级父”,其 ID 已提供(如“我想使用此父级按字母顺序排序")。如果我正确理解了嵌套集,您可以找出一个 taxonomy_node 是否属于某个父节点,当它的左右值在顶部父节点的左右值“内”时:例如左侧值的顶部节点“蔬菜” :1 和右:10 的值“土豆”左:2 和右:8 作为一个孩子。
一个项目可以有多个分类节点,我正在使用 awesome_nested_set gem 让分类节点表现得像具有层次结构的嵌套集。因此,我可以有各种主要的“分类法”来标记项目,由它们的“顶部节点”标识。
目前,识别分类节点是否属于特定“顶级节点”的唯一方法是使用分类节点的 lft 和 rght 值,这就是我在尝试允许我的用户按主要分类法之一对项目列表进行排序。
我想实现这一点的唯一方法是允许使用“条件”应用于排序本身,但实际上这不可能!
使用更简单的字段(如“item_template”)进行排序很容易实现:
@items.joins(:item_template).includes(:item_template}.order("template_name #{sorting_direction}")
这是分类表:
Table name: taxonomies
id :integer not null, primary key
name :string(255)
parent_id :integer
lft :integer
rgt :integer
created_at :datetime not null
updated_at :datetime not null
depth :integer
分类法通过 ItemTaxonomy 对象与项目相关联。我对 PostgreSQL 不太熟悉,想知道是否可以编写一个函数来尝试实现这个结果?
希望这很清楚!
【问题讨论】:
-
sort the list of items by one of the main taxonomies不是一个精确的描述。另外:只有一层嵌套?如果不是,那么如何使用lft和rght来准确识别顶部节点? -
抱歉,如果不清楚:基本上我有一些“项目”,我想根据它所附加的分类节点的字母顺序来订购,但仅限于一个特定的“顶部”父”,其 ID 已提供(如“我想使用此父级按字母顺序排序”)。如果我正确理解了嵌套集,您可以找出一个 taxonomy_node 是否属于某个父节点,当它的左右值在顶部父节点的左右值“内”时:例如左侧值的顶部节点“蔬菜” :1 和右:10 的值“土豆”左:2 和右:8 作为一个孩子。
-
好的,我想我了解您的嵌套集是如何工作的。但是您要查找的排序顺序尚未明确定义(或者我不明白)。您只想考虑属于指定“顶级父级”的
taxonomy_nodes。如果一个项目没有链接到该父级下的分类怎么办?如果有多个呢?那怎么排序呢?也请编辑您的问题与这些澄清。公众很难从 cmets 拼凑起来。 -
抱歉,我会正确编辑它
标签: ruby-on-rails postgresql rails-activerecord