定义:duplicate_extra

时间:2018-02-07 21:03:03

标签: ruby-on-rails spree

在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尚不清楚。

1 个答案:

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