You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pgfqe6ch8/app/models/discuss.rb

67 lines
2.6 KiB

class Discuss < ActiveRecord::Base
belongs_to :user
attr_accessible :user_id, :content, :dis_id, :dis_type, :parent_id, :praise_count, :root_id, :challenge_id, :position, :reward
default_scope :order => 'created_at desc'
has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
has_one :praise_tread_cache, as: :object, dependent: :destroy
acts_as_tree :foreign_key => 'parent_id'
belongs_to :dis, :polymorphic => true
belongs_to :last_reply, :class_name => 'Discuss', :foreign_key => 'last_reply_id'
has_many :tidings, :class_name => 'Tiding', :as => :container , :dependent => :destroy
after_create :send_tiding
validates_presence_of :dis, :user, :content
after_create :reset_counters!
scope :visible, lambda { where(:hidden => false)}
scope :field_for_list, lambda{
select([:id, :content, :user_id, :updated_at, :dis_id, :dis_type, :reward, :root_id, :hidden])
}
scope :posts, lambda { where(:root_id => nil, :hidden => false)}
def creator_user
User.find(self.user_id)
end
# 用户评论的game
def user_game
myshixun = Myshixun.where(:user_id => self.user_id, :shixun_id => self.dis).first
challenge_id = self.try(:challenge_id).nil? ? self.dis.challenges.first.try(:id) : self.try(:challenge_id)
game = Game.where(:myshixun_id => myshixun.try(:id), :challenge_id => challenge_id).first
end
# 用户评论的 myshixun
def user_myshixun
myshixun = Myshixun.where(:user_id => self.user_id, :shixun_id => self.dis).first
end
def content_detail
self.content
end
def reset_counters!
if parent && parent.id
parent.update_attribute(:last_reply_id, parent.children.maximum(:id))
end
if root
root.update_attribute(:last_reply_id, Discuss.where(:root_id => root.id).maximum(:id)) unless root.destroyed?
end
end
def send_tiding
if self.parent_id.present?
self.tidings << Tiding.new(:user_id => self.parent.user_id, :trigger_user_id=> self.user_id, :parent_container_id => self.challenge_id, :parent_container_type => "Challenge", :belong_container_id => self.dis_id, :belong_container_type => "Shixun", :viewed => 0, :tiding_type => "Comment")
else
self.tidings << Tiding.new(:user_id => Challenge.find(self.challenge_id).user_id, :trigger_user_id=> self.user_id, :parent_container_id => self.challenge_id, :parent_container_type => "Challenge", :belong_container_id => self.dis_id, :belong_container_type => "Shixun", :viewed => 0, :tiding_type => "Comment")
end
end
def username
self.user.show_name
end
def can_delete_api(current_user, user_id)
(current_user.admin? || current_user.id == user_id) ? true : false
end
end