gpt4 book ai didi

grails - 如何使用 grails 分类插件向分类单元添加层次结构?

转载 作者:行者123 更新时间:2023-12-02 14:08:23 24 4
gpt4 key购买 nike

我想在我的分类单元中有某种层次结构,我使用 Grails Taxonomy 插件添加到我的域类 Foo 中。 http://grails.org/plugin/taxonomy

示例(用于构建类似树的注释):
{A:{A1:{A1I, A1II}, A2:{A2I}}, B:{B1:{B1I}, B2:{B2II}}}

foo.addToTaxonomy(['A1', 'A2'], "A")
foo.addToTaxonomy(['B1', 'B2'], "B")

A1,A2,B1和B2的 child 怎么办?

最佳答案

假设您的分类树由

{A:{A1:{A1I, A1II}, A2:{A2I}}, B:{B1:{B1I}, B2:{B2II}}}



符号 A->A1->A1I 描述了树中的路径。在这种情况下,路径是在 A 树中从其根 (A) 到叶 (A1I)。

如果你想将 foo 添加到 A->A1->A1I 分类,你可以使用 foo.addTaxonomy(['A', 'A1', 'A1I']) .函数 addTaxonomy 的列表参数实际上代表分类树中的一条路径。 addTaxonomy 接受的第二个参数是可选的,本质上定义了分类树的范围。所以,如果我要这样做
foo.addTaxonomy(['A', 'A1', 'A1I'], 'scope1')
foo.addTaxonomy(['A', 'A1', 'A1I'], 'scope2')

这会将 foo 放在范围 1 和范围 2 中的 A->A1->A1I 中。它们本质上是两种不同的树。你可能不需要这个。

以下是与您在问题中描述的树结构相关的一些示例:

添加到A->A1->A1II
foo.addTaxonomy(['A', 'A1', 'A1II'])

添加到 A2->A2I
foo.addTaxonomy(['A2', 'A2I'])

添加到 B->B1->B1I
foo.addTaxonomy(['B', 'B1', 'B1I'])

添加到 B2->B2I
foo.addTaxonomy(['B2', 'B2I'])

上面的 4 个示例分别创建了以 A、A2、B 和 B2 为根的树。

如果您不想定义分类单元的绝对路径,可以执行以下操作:
def taxonPath(taxonName) {
def currentTaxon = Taxon.findByName(taxonName)
def path = [currentTaxon.name]

while(currentTaxon.parent) {
currentTaxon = currentTaxon.parent
path = [currentTaxon.name] + path
}

return path
}

taxonomyService.createTaxonomyPath(['B', 'B2', 'B2I'])
def book = new Book(name:"hacky solution")
book.addToTaxonomy(taxonPath('B2I'))

这相当于 book.addToTaxonomy(['B', 'B2', 'B2I']) .您还需要 import com.grailsrocks.taxonomy.Taxon并将 taxonomyService 注入(inject)到您的工件中,例如( def taxonomyService ) 使其工作。

该解决方案感觉有点笨拙且效率低下,但它确实有效。

关于grails - 如何使用 grails 分类插件向分类单元添加层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13388871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com