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

时间:2015-11-10 04:18:14

标签: ruby-on-rails ruby spree taxonomy

我正在尝试在Ruby脚本(la seeds.rb)中以编程方式生成Spree Commerce分类法。在面向客户的产品页面中显示Taxons,但它们无法在Admin页面中运行。

  • 分类法的“树”视图显示根节点,但没有子节点
  • 在产品编辑页面上,我无法添加任何我的任何分类

以下是一个例子:

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

当我运行它时,条目出现在我的分类和分类的数据库中。我能够以编程方式将产品与Taxons相关联:

product_BL212.taxons << tax_diamond

我猜测我的分类创建代码在某种程度上是不完整或不正确的,但我不确定如何。任何更熟悉Spree内部的人都能提供一个正确执行此操作的示例吗?

进一步观察

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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!并未解决问题。我发现创建一个Taxonomy也会创建一个Taxon,我必须在父列中使用相关分类的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'))

答案 2 :(得分:0)

Taxon.parent属性需要一个根对象。

例如:

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

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