Один простой способ, который вы можете сделать, это иметь следующее отношение в модели
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, даже если мы хотим получить и детские товары.Итак, я предлагаю использовать другое имя функции для этого или иметь флаг в определении поиска сам по себе, чтобы указать требование.
Тем не менее, вам нужно обрабатывать другие сценарии (где, объединения, ассоциации и т. Д.).
Я не уверен, что рельсы имели какую-либо поддержку для этого.