在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是在哪里定义的,以及它是如何工作的。文档还不清楚。
发布于 2018-02-07 22:05:03
默认情况下不定义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您也可以尝试在狂欢松弛上询问更多细节。
https://stackoverflow.com/questions/48673192
复制相似问题