Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >怎么擦干这段代码?

怎么擦干这段代码?
EN

Stack Overflow用户
提问于 2013-09-12 06:10:38
回答 2查看 181关注 0票数 2

在我的几个模型中有以下代码行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

我尝试过将它放入各种助手文件中,并取得了不同的成功--但问题并不是我无法工作,而是只需要一些丑陋的代码和/或额外的文件(模块等)才能将该方法包含到所有模型中--这就引起了一些注意。应该没那么难。

对控制器和视图来说,帮助代码很容易,但对于模型来说,这似乎是违反直觉的,同时,在4个地方拥有(字面上的)完全相同的代码似乎很愚蠢。把这个弄干的最好办法是什么?

更新

我想在每个模型的方法中使用average助手--在每种情况下都是不同的,但是对于最后一行,所有东西都是平均的--如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 06:28:32

对于这个非常具体的方法,您可以使用@delba答案。

要准确回答有关跨模型共享方法的问题,这是一项关注任务。

在rails-4中,关注点成为顶级公民,并且自动创建目录app/models/concernsapp/controllers/concerns

您可以在app/concerns/averageable.rb中添加类似的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module Averageable
  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
end

然后,在您的模型中使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User < ActiveRecord::Base
  include Averageable
end

您所关注的方法将可用于包含它的任何模型。

编辑:

要在rails-3中执行同样的操作,请在config.autoload_paths ( config/application.rb )中添加要将您的关注点放在其中的路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
config.autoload_paths += %W(#{config.root}/lib/concerns)

并将averageable.rb模块放在该目录中。

票数 1
EN

Stack Overflow用户

发布于 2013-09-12 06:16:32

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-average

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student < ActiveRecord::Base
  has_many :evals

  def average_score
    evals.average(:score)
  end
end

铁轨外:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def average(score)
  (score.inject(:+).to_f / score.size).round(2)
end

编辑

使用您的avg_for方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def avg_for(student)
  evals.where(student: student).average(:score)
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18766607

复制
相关文章
这段代码很有意思!
作为菜鸟的我,在面试的时候,看到了这阴间代码,心里想着谁无聊写这样的代码呀,屁点用没有,却只能默默的分析题目,但最终还是错了几个,回来之后又好好分析了一下,其实也不是很难,只是在面试的时候看到这样的东西,实在是有点搞心态了!
小丞同学
2021/08/16
5080
看完python这段爬虫代码,java流
如果不能正确安装,请检查你的环境变量,至于环境变量配置,在这里不再赘述,相关文章有很多。
py3study
2020/01/22
7030
刚写完这段代码,就被开除了……
显然不是,休眠的逻辑,大家都懂,不需要写注释,你注释写休眠 1 天也没意义啊。。。
Java技术栈
2018/12/11
6770
刚写完这段代码,就被开除了……
为什么这段代码输出的是”Hello World”
Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello w
哲洛不闹
2018/09/14
9910
为什么这段代码输出的是”Hello World”
JS中级测试: 这段代码最终会输出多少?​
可以看到的是 return this 的结果是 WINDOW对象,而不是 obj;
舒克
2019/08/19
1.7K0
代码审查|这段代码,为什么复制文件夹总是“成功”?
最近开始一个人负责整个项目的全栈开发和维护,工作中没了和同事交叉 code review 的环节,所以就打算,如果工作中遇到一些比较典型的代码,包括好味道和坏味道,就拿出来分析下,与大家一起交流,作为另一种形式的「交叉 review」。
mzlogin
2023/10/23
1220
为什么这段代码输出的是”Hello World”
Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello w
哲洛不闹
2018/09/19
1K0
为什么这段代码输出的是”Hello World”
拿好这段代码,让你求职路上不再迷茫
经常有人问:“我是该学Angular还是React?该用gulp还是webpack…” 这篇文章就是要 交给大家一把钥匙,专门解答这类问题。 解答思路 PS:如果你想成为一名优秀的架构师,或者在工作中遇到瓶颈,想跳槽加薪,面试不过, 碰到难题等等一系列问题,可以加我的架构师群:554355695 这里有最专业的团队为你排忧解难,有最新的学习资源为你共享。 我一直提倡的是学以致用,知行合一,所以当我们学习和储备技能的时候应该要和市场相结合,准确的说应该是人才市场。 要了解人才市场有个非常简单的方法——
Java架构
2018/05/04
6480
拿好这段代码,让你求职路上不再迷茫
“这段代码,我在本地运行没问题啊?”
代码仓库 代码是运行互联网项目的核心。在快速迭代的互联网项目开发中,最常见的便是多人共同协作开发场景。将代码托管至云端并使用优秀的代码管理系统,对于开发人员是至关重要的。 CODING DevOps的代码托管服务,除了基本的代码版本管理能力之外,还提供质量门禁、代码扫描等能力,能够帮助开发者规避本地代码管理的局限与安全性障碍,回归开发本身,赋能云端协作,实现快速迭代。 测试管理 CODING Devops的测试管理服务,可以让繁琐的测试过程变得井然有序。测试人员可从用例库灵活组建测试计划,实现用例重复使
博文视点Broadview
2023/05/19
3610
“这段代码,我在本地运行没问题啊?”
这段代码很Pythonic | 相见恨晚的 itertools 库
最近事情不是很多,想写一些技术文章分享给大家,同时也对自己一段时间来碎片化接受的知识进行一下梳理,所谓写清楚才能说清楚,说清楚才能想清楚,就是这个道理了。
IT派
2018/08/10
5630
你能发现这段 Python 代码中的 bug 吗?
原文链接:https://dwrodri.gitlab.io/can-you-spot-the-bug-in-this-python-code/
腾讯云 CODING
2023/08/18
1360
你能发现这段 Python 代码中的 bug 吗?
“这段代码,我在本地运行没问题啊?”
代码是运行互联网项目的核心。在快速迭代的互联网项目开发中,最常见的便是多人共同协作开发场景。将代码托管至云端并使用优秀的代码管理系统,对于开发人员是至关重要的。
小灰
2021/01/07
7780
“这段代码,我在本地运行没问题啊?”
谷歌工程师写的这段代码什么水平?
代码,正在改变世界。正是因为有了代码的存在,才有了阿里巴巴、百度、京东、天猫等的存在。
顶级程序员
2018/07/23
5670
谷歌工程师写的这段代码什么水平?
这段代码很Pythonic | 相见恨晚的 itertools 库
作者:忆先 来源:见文末 前言 最近事情不是很多,想写一些技术文章分享给大家,同时也对自己一段时间来碎片化接受的知识进行一下梳理,所谓写清楚才能说清楚,说清楚才能想清楚,就是这个道理了。 很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic的代码在执行上也更有效率。今天就先给大家介绍一下Python的系统库itertools。 itertools库 迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(list)来说,迭代器最大的优
小小科
2018/06/20
5820
JS基础测试: 这段代码的运行结果是多少?​
当条件表达式expr1为真(true)时执行表达式expr2,当它为假(false)时执行表达式expr3。
舒克
2019/08/14
1.1K0
JS基础测试: 这段代码的运行结果是多少?​
你能发现这段 Python 代码中的 bug 吗?
原文链接:https://dwrodri.gitlab.io/can-you-spot-the-bug-in-this-python-code/
腾讯云 CODING
2023/08/17
2060
你能发现这段 Python 代码中的 bug 吗?
人心易变,这段有趣的C代码也一样!!!
C语言中的volatile关键字也许大部分人都听过,但实际用过的人可能不多,它的字面意思是“易变的”。今天我们的题目就跟它有关,这也是一道比较著名和经典的面试题,不同公司对它进行过多次考察,代码如下:
Power7089
2020/07/27
5210
平安夜发了这段代码给女朋友,感情升华了!
炼丹笔记日常 作者:时晴,炼丹笔记小仙女 import turtle # https://github.com/DavidArmendariz/halloween-pumpkin-python-turtle/blob/main/halloween_pumpkin.py class HalloweenPumpkin: def __init__(self): self.window = turtle.Screen() self.tina = turtle.Tur
炼丹笔记
2021/05/14
1.1K0
平安夜发了这段代码给女朋友,感情升华了!
这段代码实例,见证了数万人入门编程
我的微信 Python 教程里有两个比较重要的代码实例,一个是前期的“猜数字”,这个例子演示了基本的输入输出、运算、类型、逻辑,之后的扩展又涉及到函数、数据结构、文件读写等。
Crossin先生
2018/09/30
6990
这段代码实例,见证了数万人入门编程
这段Java代码连不少大佬都栽了跟头,何况我
最近用了Optional实现了一段逻辑,想不到居然翻车了。看了源码之后才恍然大悟,不过翻车的不是我一个人,很多人都说自己在这个地方翻过车,其中不乏一些大佬级的人物。
码农小胖哥
2021/07/22
3690

相似问题

把我擦干。Rails代码:

22

这段代码怎么了?

12

这段代码怎么会出错?

21

这段代码是怎么回事?

10

如何擦干这个红宝石代码

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文