class PraiseTreadController < ApplicationController def praise_plus @obj = nil if request.get? @obj_id = params[:obj_id] @obj_type = params[:obj_type] @obj = praise_tread_plus(@obj_type,@obj_id,1) end end def praise_minus @obj = nil 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") @pt.delete #再更新praise_tread_cache表 使相应的记录减1 当为0时删除 @ptc = PraiseTreadCache.find_by_object_id(@obj) @ptc.minus(1) if @ptc.praise_num == 0 @ptc.delete end end @obj = User.find_by_id(@obj) respond_to do |format| format.html format.js end end def tread_plus @obj = nil if request.get? @obj_id = params[:obj_id] @obj_type = params[:obj_type] @obj = praise_tread_plus(@obj_type,@obj_id,0) 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 '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) 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 = @ptc.nil? ? PraiseTreadCache.new : @ptc @ptc.object_id = id.to_i @ptc.object_type = type @ptc.save @ptc.plus(1) end @obj = find_object_by_type_and_id(type,id) respond_to do |format| format.html format.js end end end