定义:duplicate_extra

Definition of :duplicate_extra

在 Spree 代码库中,class 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 不清楚。

默认情况下未定义duplicate_extra方法。文档说:

define "duplicate_extra" for site-specific actions, eg for additional fields

它告诉你如果你想要更多的复制逻辑,比如复制额外的字段,你自己定义它。

这行代码及其上方的注释:

  # 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 上询问更多详情。