我有一个Rails 3.2应用程序,其中Product
是一个模型。Product
包含从不为null的属性identifier
和可能为null的parent_identifier
。当这种关系存在时,可以通过几代人来维系。
我的挑战是将ProductDetail
对象(Product
的has_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
如果我误解了这个问题,请告诉我。