【发布时间】:2013-09-16 23:28:24
【问题描述】:
我的几个模型中有以下代码行:
def average(scores)
# get average of scores and round to two decimal places
average = scores.inject{ |sum, el| sum + el }.to_f / scores.size
average.round(2)
end
我尝试将它放入各种帮助文件中,并取得了不同程度的成功 - 但问题不是我无法工作,而是它需要一些丑陋的代码和/或额外的文件(模块等)只是在所有模型中都包含这种方法——这会引发一些危险信号。它不应该那么难。
Helper 代码对于控制器和视图来说很容易,但对于模型来说似乎真的违反直觉——同时,在 4 个地方(字面上)拥有完全相同的代码似乎很愚蠢。把它弄干的最好方法是什么?
更新
我想在每个模型的方法中使用 average 帮助器 - 在每种情况下都是不同的,但对于所有内容的最后一行 - 就像这样:
def avg_for(student)
scores = []
self.evals.map do |student_id, evals|
evals.select {student_id == student.id}.each do |eval|
scores << eval.score
end
end
average(scores) #here!
end
【问题讨论】:
-
你能提供更多的代码吗?助手仅用于视图,而不是控制器 + 模型。
-
@MichaelKoper,见编辑
-
model methods是什么意思?instance methods? -
哦,抱歉,不是很清楚 - 已编辑
-
@dax 不确定我完全理解您的问题,但请查看我的编辑,我重写了您的
avg_for方法。这就是你要找的吗?
标签: ruby-on-rails ruby-on-rails-3 dry helper