Как я могу смоделировать полиморфное, пользовательское отношение имени, используя Mongoid - PullRequest
3 голосов
/ 14 ноября 2011

Я пытаюсь определить серию отношений модели, используя в некоторых случаях собственные имена для модели, а в других - ее собственное имя. Кроме того, на модель могут ссылаться несколько классов, что требует полиморфных отношений.

Следующие модели упрощены (я удалил поля, дополнительные отношения и т. Д.), Но они иллюстрируют структуру, которую я пытаюсь создать, избегая создания унаследованных моделей.

class Gallery
  include Mongoid::Document
  embedded_in :galleryable, polymorphic: true
end

class App
  include Mongoid::Document
  embeds_one  :about, class_name: 'Gallery', inverse_of: :galleryable
  embeds_one  :portfolio
end

class Portfolio
  include Mongoid::Document
  embedded_in :app
  embeds_many :galleries, as: :galleryable
end

Я понимаю, что "потомок", внедряемый с помощью пользовательского отношения, также должен иметь определение class_name и inverse_of:, но как я могу определить эти значения без необходимости явно определять связанный класс?

1 Ответ

1 голос
/ 21 ноября 2012

Вам просто нужно определить свойство ассоциации ": as" :

  class Gallery
    include Mongoid::Document
    embedded_in :galleryable, polymorphic: true
  end

  class App
    include Mongoid::Document
    embeds_one  :about, as: :galleryable
    embeds_one  :portfolio
  end

  class Portfolio
    include Mongoid::Document
    embedded_in :app
    embeds_many :galleries, as: :galleryable
  end

Надеюсь, это поможет!

...