我有两个对象,项目和分类节点。
我有一个选择的“项目”,我想根据它所附加的分类节点的字母顺序来排序,但仅限于一个特定的“顶级父”,其 ID 被提供(如“我想按字母顺序排序使用这个父母”)。如果我正确理解了嵌套集,您可以找出一个 taxonomy_node 是否属于某个父级,而它的左右值在顶部父级的左右值“内”:例如左侧值的顶部节点“蔬菜” :1 和 right: 10 的“土豆”值 left: 2 和 right: 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 不太熟悉,想知道是否可以编写一个函数来尝试实现这个结果?
希望这很清楚!