From db61ecc2559f95ee422c7cf56ec0d4a134682413 Mon Sep 17 00:00:00 2001 From: yanxd Date: Fri, 6 Jun 2014 16:17:27 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=90=88=E5=B9=B6user=5Fscore=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 31 ++++++++++++++++++++-------- app/views/users/_show_score.html.erb | 27 ------------------------ app/views/users/show_score.js.erb | 2 -- 3 files changed, 22 insertions(+), 38 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 689cc7b2e..331ff6993 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -137,7 +137,7 @@ class User < Principal has_one :user_extensions,:dependent => :destroy ## end - default_scope -> { includes(:user_extensions, :user_score) } + # default_scope -> { includes(:user_extensions, :user_score) } scope :teacher, -> { joins(:user_extensions).where('user_extensions.identity = ?', UserExtensions::TEACHER) } @@ -201,6 +201,7 @@ class User < Principal # ====================================================================== # 集中处理 User 扩展表为空的问题 + # 合并 user_score 属性 validate :valid_user_extensions after_save :save_user_extensions @@ -208,21 +209,32 @@ class User < Principal self.user_extensions ||= UserExtensions.new end + def user_score_attr + self.user_score ||= UserScore.new + end + + alias_method :ori_respond_to?, :respond_to? def respond_to?(m, include_private = false) - flag = UserExtensions.instance_methods.include? m.to_sym - if flag - flag - else - super - end + flag = false + flag = ori_respond_to? m.to_sym unless flag + flag = UserExtensions.new.respond_to? m.to_sym unless flag + flag = UserScore.new.respond_to? m.to_sym unless flag + + flag end def method_missing m, *args, &block if extensions.respond_to? m.to_sym - self.class.send :define_method, m.to_sym, *args do + self.class.send(:define_method, "_meta_#{m}".to_sym) do |*args, &block| self.extensions.__send__ m.to_sym, *args end - __send__ m.to_sym, *args, &block + __send__ "_meta_#{m}".to_sym, *args, &block + + elsif user_score_attr.respond_to? m.to_sym + self.class.send(:define_method, "_meta_#{m}".to_sym) do |*args, &block| + self.user_score_attr.__send__ m.to_sym, *args + end + __send__ "_meta_#{m}".to_sym, *args, &block else super @@ -241,6 +253,7 @@ class User < Principal def save_user_extensions self.extensions.save + self.user_score_attr.save end # 集中处理 User 扩展表为空的问题 < end # ====================================================================== diff --git a/app/views/users/_show_score.html.erb b/app/views/users/_show_score.html.erb index 0297a4e02..447e04e8b 100644 --- a/app/views/users/_show_score.html.erb +++ b/app/views/users/_show_score.html.erb @@ -1,9 +1,7 @@ -<% unless @user.id == 1%> <% messages_count = @user.messages.count %> <% messages_score = messages_count * 0.05%> <% finall_messages_score = messages_score %> -<% end %> <% journals_count = @user.journals.count %> <% journals_score = journals_count * 0.1 %> @@ -73,31 +71,6 @@ -
<%= render :partial => 'users/score_index', :locals => {:index => 0 } %>
- \ No newline at end of file diff --git a/app/views/users/show_score.js.erb b/app/views/users/show_score.js.erb index b3bbf576e..3cd9a5e47 100644 --- a/app/views/users/show_score.js.erb +++ b/app/views/users/show_score.js.erb @@ -1,5 +1,3 @@ - $('#ajax-modal').html('<%= escape_javascript(render :partial => 'users/show_score') %>'); showModal('ajax-modal', '400px'); $('#ajax-modal').addClass('new-watcher'); - \ No newline at end of file From dfde06248c4f3da30d5756f6c255b70c113a8630 Mon Sep 17 00:00:00 2001 From: yanxd Date: Fri, 6 Jun 2014 17:33:42 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=89=93=E5=88=86=E5=88=9D=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReadMe.txt | 8 +++- app/models/user_score.rb | 97 ++++++++++++++++++++++++++++++++++++++++ db/schema.rb | 12 ++--- 3 files changed, 111 insertions(+), 6 deletions(-) diff --git a/ReadMe.txt b/ReadMe.txt index 9d223259a..0fcba47c0 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -44,4 +44,10 @@ app\controller\welcome_controller.rb return 0 end end -================================================================================ \ No newline at end of file +================================================================================ + +================================================================================ +0606:新坑 +user_scores表结构有问题,需要运行 +bundle exec rake db:migrate:down VERSION=20140410021724 +bundle exec rake db:migrate:up VERSION=20140410021724 \ No newline at end of file diff --git a/app/models/user_score.rb b/app/models/user_score.rb index f383d6670..8df64c00c 100644 --- a/app/models/user_score.rb +++ b/app/models/user_score.rb @@ -33,4 +33,101 @@ class UserScore < ActiveRecord::Base def self.find_min_issue self.minimum(:file) end + # 以上类方法目测没用,反正也报错 + # =============================================================================== + + # 前略·协同得分 + # operate - 更新操作 类型 symbol + # user - 计分用户 + # + # Examples + # + # UserScore.joint(:post_message, User.current, nil) + # # => true #当前用户发帖计分操作成功 + # + # Returns boolean. 返回积分保存结果 + def self.joint(operate, current_user, target_user, options={}) + user_obj = (user.kind_of?User) ? user : User.find_by_id(user) + case operate + when :post_message # current_user 发帖了 + when :post_issue # current_user 对 target_user 的缺陷留言了 + when :change_issue_status # current_user 更改了缺陷的状态 + when :reply_message # current_user 对 target_user 留言的回复 + when :reply_posting # current_user 对 target_user 帖子的回复 + else + Rails.logger.error "[UserScore#joint] ===> #{operate} is not define." + return false + end + end + + # 前略·影响力得分 + # operate - 更新操作 类型 symbol + # user - 计分用户 + # + # Examples + # + # UserScore.influence(:followed_by, user) + # # => true #当前被关注用户记分成功 + # + # Returns boolean. 返回积分保存结果 + def self.influence(operate, current_user, target_user, options={}) + case operate + when :followed_by # current_user 关注了target_user + else + Rails.logger.error "[UserScore#influence] ===> #{operate} is not define." + return false + end + end + + # 前略·技术得分 + # operate - 更新操作 类型 symbol + # user - 计分用户 + # + # Examples + # + # UserScore.skill(:followed_by, current_user, target_user) + # # => true #当前current_user对target_user用户帖子的记分成功 + # + # Returns boolean. 返回积分保存结果 + def self.skill(operate, current_user, target_user, options={}) + case operate + when :treading # current_user 踩了 target_user 的帖子 + when :treaded_by_user # current_user 踩了 target_user 的帖子 + when :praise_by_user # current_user 顶了 target_user 的帖子 + else + Rails.logger.error "[UserScore#skill] ===> #{operate} is not define." + return false + end + end + + # 前略·项目得分 + # operate - 更新操作 类型 symbol + # user - 计分用户 + # + # Examples + # + # UserScore.project(:pull_code, current_user) + # # => true #当前current_user对项目贡献积分成功 + # + # Returns boolean. 返回积分保存结果 + def self.project(operate, current_user, options={}) + case operate + when :push_code # current_user 提交了代码 + when :push_document # current_user + when :push_file # current_user + when :update_issue # current_user + when :post_issue # current_user + else + Rails.logger.error "[UserScore#skill] ===> #{operate} is not define." + return false + end + end + + private + + def get_users(current_user, target_user) + cUser = nil + tUser = nil + @current_user, @target_user = cUser, tUser + end end diff --git a/db/schema.rb b/db/schema.rb index 185f5e134..109ad65e4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -923,11 +923,13 @@ ActiveRecord::Schema.define(:version => 20140605025247) do add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id" create_table "user_scores", :force => true do |t| - t.integer "user_id" - t.integer "collaboration" - t.integer "influence" - t.integer "skill" - t.integer "activity" + t.integer "user_id", :null => false + t.integer "collaboration" + t.integer "influence" + t.integer "skill" + t.integer "active" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false end create_table "user_statuses", :force => true do |t| From 61d0532f1438c0cf3e7d9397047f901a5958ada6 Mon Sep 17 00:00:00 2001 From: yanxd Date: Fri, 6 Jun 2014 17:41:16 +0800 Subject: [PATCH 3/3] user --- app/models/user_score.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/user_score.rb b/app/models/user_score.rb index 8df64c00c..810720331 100644 --- a/app/models/user_score.rb +++ b/app/models/user_score.rb @@ -47,7 +47,6 @@ class UserScore < ActiveRecord::Base # # Returns boolean. 返回积分保存结果 def self.joint(operate, current_user, target_user, options={}) - user_obj = (user.kind_of?User) ? user : User.find_by_id(user) case operate when :post_message # current_user 发帖了 when :post_issue # current_user 对 target_user 的缺陷留言了 @@ -118,7 +117,7 @@ class UserScore < ActiveRecord::Base when :update_issue # current_user when :post_issue # current_user else - Rails.logger.error "[UserScore#skill] ===> #{operate} is not define." + Rails.logger.error "[UserScore#project] ===> #{operate} is not define." return false end end @@ -126,8 +125,9 @@ class UserScore < ActiveRecord::Base private def get_users(current_user, target_user) - cUser = nil - tUser = nil + cUser = (current_user.kind_of?User) ? user : User.find_by_id(user) + tUser = (target_user.kind_of?User) ? user : User.find_by_id(user) + @current_user, @target_user = cUser, tUser end end