вопрос о полиморфной ассоциации - PullRequest
0 голосов
/ 17 декабря 2010
Например,

, у меня есть 2 модели Drummer и Video

Если я использую связь один-ко-многим drummer has_many videos, и video belongs_to drummer,

Так что я могуиспользуйте метод с обеих сторон: video.drummers или drummer.videos

Но когда я использую полиморфную ассоциацию, что, на мой взгляд, подходит для этого, потому что будет много моделей с видео, имеет смыслсделать модель видео полиморфной

Я могу использовать drummer.videos, но я не знаю, как определить, к какому барабанщику принадлежит видео

video.drummer не работает,

Кто-нибудь может сказать мне, как это сделать, и какие еще методы я могу использовать после того, как я установлю связь.

Спасибо

1 Ответ

0 голосов
/ 17 декабря 2010

Сначала вам нужно добавить файл миграции для добавления столбцов в видео:

class AddPolymorphicReferenceToVideos < ActiveRecord::Migration
  def self.up
    add_column :videos, :video_holder_id, :integer
    add_column :videos, :video_holder_type, :string
    add_index :videos, :video_holder_id
    add_index :videos, :video_holder_type
  end

  def self.down
    # just remove indexes and columns above
  end
end

Затем вы можете добавить полиморфную ассоциацию в Video модели:

class Video < ActiveRecord::Base
  belongs_to :video_holder, :polymorphic => true
end

И изменитьваш Drummer вот так:

class Drummer < ActiveRecord::Base
  has_many :videos, :as => :video_holder
end

Теперь вы можете использовать полиморфную ассоциацию:

drummer.videos  # => an videos array
video.video_holder  # => a model holds the video
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...