class PraiseTreadController < ApplicationController accept_api_auth :tread_plus,:praise_plus before_filter :require_login,:only => [:praise_plus,:tread_plus] def praise_plus @obj = nil @activity = false if request.get? @obj_id = params[:obj_id] @obj_type = params[:obj_type] if !params[:user_activity_id].nil? && !params[:type].nil? @user_activity_id = params[:user_activity_id] @type = params[:type] @activity = true end # @is_in_list = nil @obj = find_object_by_type_and_id(@obj_type,@obj_id) pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id) unless pts.empty? respond_to do |format| format.js end return end @horizontal = params[:horizontal].downcase == "false" ? false:true if params[:horizontal] if @obj.respond_to?("author_id") author_id = @obj.author_id elsif @obj.respond_to?("user_id") author_id = @obj.user_id end unless author_id == User.current.id praise_tread_plus(@obj_type,@obj_id,1) end respond_to do |format| format.js end end end def praise_minus @obj = nil @activity = false if request.get? #@obj = params[:obj] # 传的是对象,最后变成id了 #首先更新praise_tread 表 删除关注记录 #@pt = PraiseTread.find_by_user_id_and_praise_tread_object_id_and_praise_tread_object_type(User.current.id,@obj,"user") @obj_id = params[:obj_id] @obj_type = params[:obj_type] if !params[:user_activity_id].nil? && !params[:type].nil? @user_activity_id = params[:user_activity_id] @type = params[:type] @activity = true end @obj = find_object_by_type_and_id(@obj_type,@obj_id) @pt = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id).first if @pt.nil? respond_to do |format| format.js end return end @pt.delete if !@pt.nil? #再更新praise_tread_cache表 使相应的记录减1 当为0时删除 @ptc = PraiseTreadCache.where("object_id=? and object_type=?",@obj_id,@obj_type.to_s).first @ptc.minus(1) if !@ptc.nil? if @ptc.praise_num == 0 @ptc.delete end end #@obj = User.find_by_id(@obj) respond_to do |format| format.js end end def tread_plus @obj = nil # @is_in_list = nil if request.get? @obj_id = params[:obj_id] @obj_type = params[:obj_type] #@horizontal = params[:horizontal].downcase == "false" ? false:true @obj = find_object_by_type_and_id(@obj_type,@obj_id) unless @obj.author_id == User.current.id praise_tread_plus(@obj_type,@obj_id,0) end end end def tread_minus respond_to do |format| format.html format.js end end private def find_object_by_type_and_id(type,id) @obj = nil case type when 'Memo' @obj = Memo.find_by_id(id) when 'Message' @obj = Message.find_by_id(id) when 'HomeworkCommon' @obj = HomeworkCommon.find_by_id(id) when 'JournalsForMessage' @obj = JournalsForMessage.find_by_id(id) when 'News' @obj = News.find_by_id(id) when 'Comment' @obj = Comment.find_by_id(id) when 'Journal' @obj = Journal.find_by_id(id) when 'BlogComment' @obj = BlogComment.find_by_id(id) when 'OrgDocumentComment' @obj = OrgDocumentComment.find_by_id(id) when 'User' @obj = User.find_by_id(id) when 'Issue' @obj = Issue.find_by_id(id) when 'Project' @obj = Project.find_by_id(id) when 'Bid' @obj = Bid.find_by_id(id) when 'Contest' @obj = Contest.find_by_id(id) else @obj = nil end return @obj end def praise_tread_plus(type,id,flag) unless id.nil? and type.nil? #首先创建或更新praise_tread 表 @pt = PraiseTread.new @pt.user_id = User.current.id @pt.praise_tread_object_id = id.to_i @pt.praise_tread_object_type = type @pt.praise_or_tread = flag @pt.save # end #再创建或更新praise_tread_cache表 #@ptc = PraiseTreadCache.find_by_object_id_and_object_type(id,type) @ptc = PraiseTreadCache.where("object_id = ? and object_type = ?",id.to_i,type).first @ptc = @ptc.nil? ? PraiseTreadCache.new : @ptc @ptc.object_id = id.to_i @ptc.object_type = type @ptc.save @ptc.plus(flag,1) end end end