Как вернуть другую активную запись на основе какого-либо условия, когда вызывается объект активной записи? - PullRequest
0 голосов
/ 25 апреля 2018

Модель продукта имеет идентификатор, имя и master_prouduct_id

Продукты, для которых master_prouduct_id имеет значение NULL, сами являются основными продуктами.

Всякий раз, когда я загружаю объект продукта, мне нужно возвращать master_product.

Как мне это реализовать?

Я думал, что смогу сделать это с помощью обратного вызова after_find.

Но after_find вызывается после загрузки объекта.

1 Ответ

0 голосов
/ 25 апреля 2018

Один простой способ, который вы можете сделать, это иметь следующее отношение в модели

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, даже если мы хотим получить и детские товары.Итак, я предлагаю использовать другое имя функции для этого или иметь флаг в определении поиска сам по себе, чтобы указать требование.

Тем не менее, вам нужно обрабатывать другие сценарии (где, объединения, ассоциации и т. Д.).

Я не уверен, что рельсы имели какую-либо поддержку для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...