class WatchersOfUser < ActiveRecord::Base attr_accessible :user_id, :watcher_id belongs_to :user validates_uniqueness_of :watcher_id, :scope => :user_id validate :validate_user validate :validate_watcher validates_presence_of :watcher_id, :user_id def self.watch_user(watcher_id, user_id) unless user_id == watcher_id @watchers_of_user = WatchersOfUser.new @watchers_of_user.watcher_id = watcher_id @watchers_of_user.user_id = user_id @watchers_of_user.save true else false end end def cancel_watching_user self.class.cancel_watching_user(self.watcher_id, self.user_id) end def self.cancel_watching_user(watcher_id, user_id) self.delete_all(["user_id = ? and watcher_id = ?", user_id, watcher_id]) true end def self.find_users(watcher_id) @user = WatchersOfUser.find_by_sql("select * from users where id in (select user_id from #{WatchersOfUser.table_name} where watcher_id = #{watcher_id})") @user # @watch_table_for_user=WatchersOfUser.where(:watcher_id => watcher_id) # @user = [] # @watch_table_for_user.each do |watch| # @user.push(watch.user) # end # @user end def self.find_watchers(user_id) @watcher = WatchersOfUser.find_by_sql("select * from users where id in (select watcher_id from #{WatchersOfUser.table_name} where user_id = #{user_id})") @watcher # user = User.find(user_id) # @watch_table_for_watcher = user.watchers_of_users # @watcher = [] # @watch_table_for_watcher.each do |watch| # user_temp = User.find(watch.watcher_id) # @watcher.push(user_temp) # end # @watcher end #验证user是否存在 def validate_user errors.add :user_id, :invalid if user.nil? || !user.active? end #验证watcher是否存在 def validate_watcher user = User.where("id = ?", watcher_id).to_a.first errors.add :watcher_id, :invalid if user.nil? || !user.active? end end