如何找到parent_id是可选的ActiveRecord条目的最终祖先



我有一个Rails 3.2应用程序,其中Product是一个模型。Product包含从不为null的属性identifier和可能为null的parent_identifier。当这种关系存在时,可以通过几代人来维系。

我的挑战是将ProductDetail对象(Producthas_many)复制到后续的子产品上。

不过,最终祖先可能没有输入产品详细信息。我只需要沿着链条向上走,到达我遇到的祖先产品确实有产品详细信息的地方,然后复制最新产品下的详细信息。

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

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

如果我正确理解您的挑战,以下方法应该为您提供您想要的东西(最近的上游非空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

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

相关内容

  • 没有找到相关文章

最新更新