Mongoid один объект, связанный с несколькими полями - PullRequest
1 голос
/ 23 февраля 2011

Можно ли связать один объект как несколько полей? Как то так?

Модель объявления

class Ad
  include Mongoid::Document
  field :name

  referenced_in :ad_types, :as => :web_spec
  referenced_in :ad_types, :as => :print_spec
end

Модель AdType

class AdType
  include Mongoid::Document
  field :shape
  field :size
  field :medium

  references_many :ads
end

Затем сделайте ссылку на каждую ссылку как отдельное поле в форме, подобной этой.

<%= f.input :web_spec, :collection => AdType.where(:medium => "Web"), :label_method => :shape, :label => "Web" %>
<%= f.input :print_spec, :collection => AdType.where(:medium => "Print"), :label_method => :shape, :label => "Print" %>

Я дал что-то подобное без удачи. Я, вероятно, ошибаюсь или эта функция просто еще не существует. Любые предложения будут великолепны.

1 Ответ

0 голосов
/ 24 февраля 2011

Несколько вопросов.Есть ли причина, почему AdType сам по себе является документом?Если у вас не будет большого количества типов, возможно, имеет смысл иметь встроенный документ.Во-вторых, что может быть чище, так это наличие одной ассоциации (независимо от того, является ли она ссылочной или встроенной) и две области действия для вашей модели объявления.Используя ваш пример, я бы получил что-то вроде этого:

class Ad
  include Mongoid::Document
  field :name
  embeds_one :ad_type

  scope :web ...
  scope :print ...
end

class AdType
  include Mongoid::Document
  field :shape
  field :size
  field :medium

  embedded_in :ad, :inverse_of => :ad_type
end
...