Rails 3: Как мне установить это отношение has_many? - PullRequest
0 голосов
/ 05 мая 2011

Пытаюсь выяснить, как лучше настроить мои модели.Вот что я собираюсь сделать ...

Модели: Dog, Video, Photo, User

class Dog < ActiveRecord::Base
  has_many :videos
  has_many :photos
  belongs_to :user
end

class Video < ActiveRecord::Base
  has_many :dogs
  belongs_to :user
end

class Photo < ActiveRecord::Base
  has_many :dogs
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :dogs
  has_many :videos
  has_many :photo
end

Должен ли я сделать has_many :through иполиморфный?

В моей предыдущей итерации я имел модели DogPhoto и DogVideo, но, похоже, у меня может быть одна DogItem модель, которая полиморфна.

Мысли?

1 Ответ

0 голосов
/ 05 мая 2011

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

Таким образом, у пользователя есть собака, а у собаки много DogMedias. DogMedia - это полиморфная ассоциация, которая может быть фото, видео или чем-то еще, что вам нравится:)

Вы можете использовать многие из них, чтобы напрямую получить dogmedia для собаки пользователя. Да. Что-то вроде:

User has many dog_medias through dog  (plain language)

или просто пройти через собаку:

user.dog.dog_media

Если вы сделаете последнее, вы даже можете создать Media вместо класса DogMedia, создать делегат и выполнить аккуратное:

user.dog_media

напрямую (Закон Деметры: http://en.wikipedia.org/wiki/Law_of_Demeter)

...