Есть ли способ полиморфного связывания с немонгоидным документом? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть класс Order с полеморфным полем orderalbe.Некоторые продукты ассоциируются с Order, например Book.

. Это нормально работает, если Book имеет Mongoid :: Document, но некоторые продукты не сохраняются в локальной базе данных вместо извлечения из API.

Есть лихороший способ справиться с этим делом?Должен ли я реализовать некоторые методы, которые могут быть такими же, как локальное хранилище?

  class Order
    include Mongoid::Document
    belongs_to :orderable, polymorphic: true
  end

  class Book
    include Mongoid::Document
  end

  class Car
    def self.find(id)
      # Fetch from API
      new Car()
    end
  end
o = Order.create(orderable_id: 1, orderable_type: 'Car')
o.orderable
=> nil  # why is nil? Not use self.find() method?

1 Ответ

1 голос
/ 04 июля 2019

Я нашел ответ, посмотрев исходный код mongoid. Если у других людей есть подобные потребности, я надеюсь, что некоторая помощь. Пожалуйста, дайте мне знать, если есть лучшее решение.

Я посмотрел на исходный код mongoid и обнаружил, что на самом деле его запрашивал оператор where (метод not find).

class Car
  def self.where(*args)
    # Fetch from API
    [new(fetched_attributes_by_api)]
  end
end

o = Order.first
o.orderable
=> #<Car _id: 1>
...