#coding=utf-8 class AtMessage < ActiveRecord::Base belongs_to :user belongs_to :sender, class_name: "User", foreign_key: "sender_id" attr_accessible :at_message, :container, :viewed, :user_id, :sender_id belongs_to :at_message, polymorphic: true belongs_to :container, polymorphic: true has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy validates :user_id, :sender_id, :at_message_id, :at_message_type, presence: true after_create :add_user_message scope :unviewed, ->(type, id){ where(at_message_type: type, at_message_id:id, viewed: false) } def viewed! update_attribute :viewed, true end def at_valid? return true if at_message_type == 'Issue' return true if 'Journal' == at_message_type return true if 'JournalsForMessage' == at_message_type return true if 'Message' == at_message_type false end def add_user_message if MessageAll.where(message_type: self.class.name,message_id: self.id).empty? self.message_alls << MessageAll.new(:user_id => self.user_id) end end def subject case at_message_type when "Issue" "新建问题: " + at_message.subject when "Journal" "问题留言: " + at_message.journalized.subject when 'Message' if(at_message.topic?) "发布新帖: " else "回复帖子: " end + at_message.subject when 'JournalsForMessage' if at_message.jour_type == 'Principal' "留言: 在#{at_message.at_user.show_name}主页中留言" else "作业: #{at_message.jour.name} 中留言" end else logger.error "error type: #{at_message_type}" end end def description case at_message_type when "Issue" at_message.description when "Journal" at_message.notes when 'Message' at_message.content when "JournalsForMessage" at_message.notes else logger.error "error type: #{at_message_type}" end end def author case at_message_type when "Issue" at_message.author when "Journal" at_message.user when 'Message' at_message.author when 'JournalsForMessage' at_message.user else logger.error "error type: #{at_message_type}" end end def url case at_message_type when "Issue" {controller: :issues, action: :show, id: at_message} when "Journal" {controller: :issues, action: :show, id: at_message.journalized} when 'Message' {controller: :boards, action: :show, project_id: at_message.board.project, id: at_message.board} when 'JournalsForMessage' if at_message.jour_type == 'Principal' {controller: :users, action: :user_messages, id: at_message.at_user} else {controller: :homework_common, action: :index, course: at_message.jour.course_id} end else logger.error "error type: #{at_message_type}" end end end