我正在尝试在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
中的permalink
和spree_taxons
字段对于我生成的分类是空白的,但不是Spree创建的分类。当我手动填充根节点和两个示例子项的某些值时,分类/分类仍然无法在Admin中正常工作。
当spree_taxons
拥有所需信息时,在spree_taxons_translations
填充这些值是否很重要?
如果是这样,我如何让Spree正确填充这些字段的值?
答案 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)