2

我有一个 Rails 3.2 应用程序,其中Product有一个模型。Product包含属性identifier,它永远不会为空,并且parent_identifier,它可能是空的。这些关系,如果存在的话,可以通过许多代被链接起来。

ProductDetail我的挑战是将对象 a has_manyof复制Product到后续子产品中。

但是,最终祖先可能尚未输入产品详细信息。我只需要沿着链条向上移动到遇到具有产品详细信息的祖先产品的位置,然后将其复制到最新产品下。

在找到这些产品详细信息之前,我如何才能沿着链条向上移动?

* 注意:该identifier字段不是主键,因为它parent_identifier来自外部数据库,如果它来自客户注册之前,甚至可能在本地不存在,因此不实用。在每次加载时检查这一点是不切实际的,因为每天有数百万个产品要保持同步。*

4

1 回答 1

2

如果我正确理解您的挑战,以下方法应该为您提供您所追求的(最近的上游非空 ProductDetails 集合)。

class Product > ActiveRecord::Base
  def parent
    @parent ||= Product.where(identifier: self.parent_identifier).first
  end

  def parent_product_details
    return unless parent

    upstream_details = parent.product_details
    upstream_details = parent.parent_product_details if upstream_details.empty?

    upstream_details
  end
end

如果我误解了这个问题,请告诉我。

于 2013-07-26T21:26:05.890 回答