Ruby on rails 在控制器中调用类/实例方法

Ruby on rails 在控制器中调用类/实例方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我刚开始制作一个应用程序,它是员工的技能矩阵 每个员工有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

我刚开始制作一个应用程序,它是员工的技能矩阵

每个员工有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

我知道这是不正确的语法。这是正确的方法还是应该由我的控制器在创建评级后处理?如果是,我将在哪个控制器操作上定义它?如果我要使用一种方法,我有同样的问题。我相信还有更好的方法

我假设你的模型上有一些关系,比如

等级
如果是这样,您只需要将方法添加到员工模型中,如:

def重量
(评级:emp_分数*0.4+
评级经理评分*0.2+
rating.sme_score*0.4)。到_i#表示整数值
结束
把它叫做
@employee.weight

如果您想将属性
wgt\u score
添加到评级模型中,并在评级对象更新时更新它-那么您必须在保存之前添加
(例如)回调到评级模型,如:

等级
您不希望类方法调用
params
。如果您想在模型中使用此项,则需要传入
评级\u id
。它是否属于模型取决于,但没有理由不能作为模型实例方法启动,可能是在回调中(这里可能有龙)。如果模型已经有了评级关系,那么你不需要输入评级id,你已经有了。回答得好。次要的吹毛求疵,我可能会调用方法
weighted_score
或类似的东西,因为这就是它的计算方法。我有一个中间表,所以我有一个属于员工和技能的评分表/模型。Skills只有一个skill_id和摘要,并通过评级拥有许多员工。评级表包含员工和技能的FKs以及存储在其中的所有评级。我认为这种方法也会类似。一旦我定义了该方法应该在何处调用?由于
权重
方法仅使用
评级
中的属性,因此该方法作为一个整体应该移动到
评级
类。然后,在
Employee
类中,可以定义对该方法的委托:
delegate:weight,to::rating
。然后,您仍然可以调用
employee.weight
,而方法实际上是在
Rating
中定义的。