以编程方式生成的 Spree Taxons 未在 Admin 中显示树

Programmatically generated Spree Taxons not showing tree in Admin

我正在尝试在 Ruby 脚本(a la seeds.rb)中以编程方式生成 Spree Commerce 分类法。在面向客户的产品页面中会出现分类单元,但它们在管理页面中不起作用。

这是一个例子:

taxonomy_stones = Spree::Taxonomy.where(:name => 'Gemstone Type').first_or_create
tax_stones = Spree::Taxon.where(name: "Gemstone", parent: nil, taxonomy: taxonomy_stones).first_or_create
tax_diamond = Spree::Taxon.where(name: "Diamond", parent: tax_stones, taxonomy: taxonomy_stones).first_or_create
  tax_fancy_yellow = Spree::Taxon.where(name: "Fancy Yellow Diamond", parent: tax_diamond, taxonomy: taxonomy_stones).first_or_create
  tax_fancy_pink = Spree::Taxon.where(name: "Fancy Pink Diamond", parent: tax_diamond, taxonomy: taxonomy_stones).first_or_create

当我 运行 这样做时,条目会出现在我的分类法和类群的数据库中。我能够以编程方式将产品关联到分类单元:

product_BL212.taxons << tax_diamond

我猜测我的 Taxon 创建代码在某些方面不完整或不正确,但我不确定是怎么回事。任何更熟悉 Spree 内部结构的人都可以提供正确执行此操作的示例吗?

进一步观察

我使用管理员 UI 创建样本分类法并将数据库条目与我生成的条目进行比较。 namepermalink 中的 spree_taxons 字段对于我生成的 Taxons 是空白的,但不是 Spree 创建的 Taxons。当我为根节点和两个示例子节点手动填充一些值时,taxonomy/taxons 仍然无法在 Admin 中正常工作。

spree_taxons_translations 拥有所需信息时,在 spree_taxons 中填充这些值是否重要? 如果是这样,我如何让 Spree 正确填充这些字段的值?

添加 Taxon 后调用 Spree::Taxon.rebuild! 可解决问题。

我有一个类似的问题,我有代码

Spree::Taxonomy.find_or_create_by(name:'Brands')
Spree::Taxon.find_or_initialize_by(name:'brand_name').update(taxonomy: Spree::Taxonomy.find_by(name:'Brands'))

运行Spree::Taxon.rebuild!没有解决问题。我发现创建一个分类法也会用它创建一个分类单元,我必须在我正在创建的新分类单元的父列中使用关联分类单元的 ID。

所以

Spree::Taxon.find_or_initialize_by(name:'brand_name').update(taxonomy: Spree::Taxonomy.find_by(name:'Brands'))

必须更改为

Spree::Taxon.find_or_initialize_by(name:'brand_name').update(taxonomy: Spree::Taxonomy.find_by(name:'Brands'), parent: Spree::Taxon.find_by(name:'Brands'))

Taxon.parent 属性需要根对象。

例如:

t = Spree::Taxonomy.create(name: "Season")

tt = Spree::Taxon.create(name: "Winter", taxonomy: t, parent: t.root)