产品型号有id,name和master_prouduct_id
master_prouduct_id为NULL的产品本身就是主产品。
当我加载产品对象时,我需要返回master_product。
我该如何实现?
我以为我可以通过after_find回调完成这项工作。
但是在加载对象后调用after_find。
答案 0 :(得分:3)
您可以做的一个简单方法是,在模型中具有以下关系
belongs_to :master_product, :foreign_key => : master_prouduct_id, :class_name => "Product"
通过在任何产品对象上调用master_product,我们可以获得主对象。
但是这个实现需要应用程序逻辑来处理是否调用master_product。
别担心,我们可以按照以下其他方式进行操作,
Product < AR::Base
def self.find(id)
rec = super(id)
rec.master_product_id ? super(rec.master_product_id) : rec
end
end
但是,通过这种方式我们根本不会使用find获得儿童产品,即使我们也希望获得儿童产品。因此,我建议为此使用不同的函数名称,或者在查找定义中有一个标志,它可以自我说明要求。
仍然,你需要处理其他场景(Where,Joins,Associations等)。
我不确定rails是否对此有任何支持。