在Spree代码库中,类ProductDuplicator采用duplicate
方法:
def duplicate
new_product = duplicate_product
# don't dup the actual variants, just the characterising types
new_product.option_types = product.option_types if product.has_variants?
# allow site to do some customization
new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra)
new_product.save!
new_product
end
我想弄清楚:duplicate_extra
的定义位置及其工作原理。 documentation尚不清楚。
答案 0 :(得分:2)
默认情况下未定义duplicate_extra
方法。文档说:
定义" duplicate_extra"特定于站点的操作,例如其他字段
如果你想要更多的复制逻辑,它会告诉你自己定义它,比如复制其他字段。
这行代码连同上面的注释:
# allow site to do some customization
new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra)
清楚地检查产品是否响应了以另一个产品为参数的方法duplicate_extra
。
duplicate_extra
方法应该被定义为Product
的实例方法(或者如果你是子类化它,你可以在子类中定义它),有一个参数,如下所示:
class Product
def duplicate_extra(original_product)
# copy custom stuff from the original product to self
end
end
您也可以尝试在Spree slack上询问更多详情。