Это немного сложно, и я не уверен, как это реализовать. У меня есть модель пользователя и модель отношений. Пользователи могут «следовать» друг за другом (как твиттер). Модель отношений настроена правильно и отлично работает.
Далее у меня есть модель Event. Каждый пользователь имеет события _________________ (многие-многие-ассоциации между пользователями и событиями). Пользователи "посещают" события.
Я хотел бы получить список всех событий, которые
- посещение current_user
- посещают пользователи, за которыми следует current_user.
Если возможно, я хотел бы, чтобы этот список был доступен через модель User, чтобы я мог сказать current_user.event_feed, и он будет перечислять все события, как упомянуто выше.
Вот мои модели:
class Event < ActiveRecord::Base
attr_accessible :name,
:description,
:event_date,
:location,
:owner_id,
:category,
:photo
CATEGORIES = ['Music', 'Outdoors', 'Party']
has_and_belongs_to_many :users
и модель отношений:
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
belongs_to :follower, :class_name => "User"
belongs_to :followed, :class_name => "User"
validates :follower_id, :presence => true
validates :followed_id, :presence => true
end
и модель пользователя:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
attr_accessor :password
attr_accessible :name, :email, :password, :password_confirmation, :time_zone
has_and_belongs_to_many :events
has_many :relationships, :dependent => :destroy,
:foreign_key => "follower_id"
has_many :reverse_relationships, :dependent => :destroy,
:foreign_key => "followed_id",
:class_name => "Relationship"
has_many :following, :through => :relationships,
:source => :followed
has_many :followers, :through => :reverse_relationships,
:source => :follower
Спасибо!