has_and_belongs_to_many или полиморфное has_many: через? - PullRequest
2 голосов
/ 20 февраля 2012

У меня проблемы с поиском правильного способа установить эту ассоциацию.

У меня есть 3 модели: музыканты, группы и менеджеры. С каждым из них может быть связан определенный «уровень» (стресс, счастье и т. Д.).

Но я не уверен, как правильно связать мою модель уровней с другой 3.

Мне нужен какой-то тип has_many: через это полиморфно? И как я могу это настроить? Есть ли какой-то другой тип связанных мне нужно?

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Да, это будет полиморфная ассоциация:

class Level < ActiveRecord::Base
  belongs_to :leveled, :polymorphic => true # maybe there's a better word than "leveled"
end

class Musician < ActiveRecord::Base
  has_many :levels, :as => :leveled
end

Вам нужно будет добавить leveled_type и leveled_id в таблицу уровней.

0 голосов
/ 20 февраля 2012

Если в этом случае вы определяете атрибуты, которые могут быть назначены определенному классу модели, то вы, вероятно, захотите использовать более традиционный подход.Вместо kind используйте что-то вроде record_type и вместо этого создайте область видимости.

Таким образом, для их извлечения вы создадите метод доступа, а не отношения между любыми вашими сущностями.и этот столбец.Примерно так:

def levels
  Level.for_record_type(self.class)
end

for_record_type - это область действия:

scope :for_record_type, lambda { |record_type|
  where(:record_type => record_type.to_s)
}

Не существует соглашения для связывания моделей с классами вместо экземпляров других моделей.

...