parent
c0de5d55de
commit
fc63dfcb7b
@ -0,0 +1,100 @@
|
|||||||
|
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'
|
||||||
|
"作业留言: " + at_message.jour.description
|
||||||
|
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'
|
||||||
|
{controller: :homework_common, action: :index, course: at_message.jour.course_id}
|
||||||
|
else
|
||||||
|
logger.error "error type: #{at_message_type}"
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,15 @@
|
|||||||
|
class CreateAtMessages < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
create_table :at_messages do |t|
|
||||||
|
t.references :user
|
||||||
|
t.integer :at_message_id
|
||||||
|
t.string :at_message_type
|
||||||
|
t.boolean :viewed, :default => false
|
||||||
|
t.string :container_type
|
||||||
|
t.integer :container_id
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
add_index :at_messages, :user_id
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
class AddSenderToAtMessage < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :at_messages, :sender_id, :integer
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,12 @@
|
|||||||
|
# Read about factories at https://github.com/thoughtbot/factory_girl
|
||||||
|
|
||||||
|
FactoryGirl.define do
|
||||||
|
factory :at_message do
|
||||||
|
user nil
|
||||||
|
at_message_id 1
|
||||||
|
at_message_type "MyString"
|
||||||
|
viewed false
|
||||||
|
container_type "MyString"
|
||||||
|
container_id 1
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe AtMessage, :type => :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in new issue