我刚开始为员工整理一个应用技能矩阵的应用程序。
每位员工都有3个评分。一个来自他们自己,一个来自他们的经理,一个来自技能专家。
我想让每位员工根据上述3个分数和相应的权重(40%,20%,40%)进行加权分数。
我假设我需要在我的模型中创建某种方法,例如:
def self.calc_weight
a = Rating.find(params[:id])
b = a.emp_score *.4
c = a.mgr_score *.2
d = a.sme_score *.4
e = b + c + d
a.wgt_score = e
end
我知道这是不正确的语法。这是正确的方法还是应该在创建评级后由我的控制器处理?如果是这样我会定义哪个控制器动作?如果我要使用一种方法,我也有同样的问题。我相信这也是一个更好的方法。
答案 0 :(得分:2)
我假设你的模特有一些关系,比如
class Rating < ActiveRecord::Base
belongs_to :employee
end
class Employee < ActiveRecord::Base
has_one :rating
end
如果是这样,您只需要向Employee模型添加方法,例如:
def weight
(rating.emp_score * 0.4 +
rating.mgr_score * 0.2 +
rating.sme_score * 0.4).to_i # for integer value
end
并将其称为@employee.weight
或强>
如果您想将属性wgt_score
添加到评级模型并在评级对象更新时更新它 - 那么您必须将before_save
(例如)回调添加到评级模型,如:
class Rating < ActiveRecord::Base
belongs_to :employee
before_save :update_weight
# ...
private
def update_weight
self.wgt_score = (emp_score * 0.4 +
mgr_score * 0.2 +
sme_score * 0.4)
end
end