Как настроить полиморфное has_many: through? - PullRequest
0 голосов
/ 20 февраля 2012

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

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

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

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

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

enter image description here

Я задавал подобный вопрос раньше, но сделал ужасную работу, объясняя, что я пытался сделать, так что это моя вторая попытка.

1 Ответ

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

ItemLevels нужен тип, чтобы знать, с чем он связан:

class ItemLevel < ActiveRecord::Base
    #  levelable_id   :integer
    #  levelable_type :string(255)
    belongs_to :levelable, :polymorphic => true
    has_many :levels
end

class Musician < ActiveRecord::Base
    has_many :levelables
end

class Musician < ActiveRecord::Base
    has_many :levelables
end

class Manager < ActiveRecord::Base
    has_many :levelables
end

Уровень должен знать только, с каким ItemLevel он связан:

class Level < ActiveRecord::Base
    belongs_to :item_level
end

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

...