|
- module Watchable
- extend ActiveSupport::Concern
-
- included do
- has_many :watchers, as: :watchable, dependent: :destroy
- has_many :watcher_users, through: :watchers, source: :user, validate: false
-
- scope :watched_by, -> (user_id) { includes(:watchers).where(watchers: { user_id: user_id }) }
- scope :following, -> (user_id) { watched_by(user_id) }
- end
-
- def watched?(watchable)
- watchable.watchers.exists?(user: self)
- end
-
- def watch!(watchable)
- watchable.watchers.create!(user: self, created_at: Time.current)
- end
-
- def unwatch!(watchable)
- obj = watchable.watchers.find_by(user: self)
- obj.destroy! if obj.present?
- end
-
- # 我正在关注的、我追随的
- def following
- User.following(self.id)
- end
-
- def following_count
- following.size
- end
-
- # 关注我的、我的粉丝、我的追随者
- def followers
- watcher_users
- end
-
- def followers_count
- followers.size
- end
-
- module ClassMethods
- end
- end
|