Мне трудно понять, как создать следующие ассоциации:
- У пользователя много фотоальбомов
- Фотоальбом имеет много фотографий
- Пользователи могут следить за чьим-то конкретным фотоальбомом (и косвенно они в конечном итоге следуют за владельцем фотоальбома) и отображать фотографии в сценарии типа «новостной ленты», поэтому между ними должна быть установлена какая-то связь их
Вот ассоциации, которые у меня есть:
class User < ActiveRecord::Base
has_many :photo_albums
has_many :photos
has_many :relationships, :foreign_key => "follower_id",
:dependent => :destroy
has_many :reverse_relationships, :foreign_key => "followed_id",
:class_name => "Relationship",
:dependent => :destroy
has_many :followings, :through => :relationships, :source => :followed
has_many :followers, :through => :reverse_relationships, :source => :follower
end
class PhotoAlbum < ActiveRecord::Base
belongs_to :user
has_many :photos
end
class Photo < ActiveRecord::Base
belongs_to :user
belongs_to :photo_album
end
class Relationship < ActiveRecord::Base
belongs_to :follower, :foreign_key => "follower_id", :class_name => "User"
belongs_to :followed, :foreign_key => "followed_id", :class_name => "User"
end
Как мне сделать так, чтобы я мог просто получить все фотографии из фотоальбомов, за которыми следит пользователь?
Пример:
- У Джейн есть 2 фотоальбома: "Публичная публика Джейн" и "Приват Джейн"
Материал "с фотографиями в каждом из них.
- Боб следует ТОЛЬКО "Общественным материалам Джейн", так как я могу вернуть фотографии
только из этого фотоальбома через ассоциации ActiveRecord?
Что-то вроде bob.followings.photos
, которое возвращает фотографии ТОЛЬКО из фотоальбомов, за которыми следит Боб ... или даже bob.followings.photo_albums
, чтобы получить коллекцию всех фотоальбомов, за которыми следит Боб
Я знаю, что, вероятно, есть длинный путь для этого, но есть ли более простой способ использования ассоциаций ActiveRecord?
Спасибо за любые советы или рекомендации, которые вы можете предоставить! Я действительно ценю это!