Rails 4按模型方法求和

J3R*_*3RN 16 ruby activerecord ruby-on-rails activerecord-relation ruby-on-rails-4.1

在我的应用程序中,我有一个User模型,有一个goal_ytd方法,执行一些计算.

在控制器,我有一个变量@users可能是UserActiveRecord::Relationusers,我想总结所有的@usersgoal_ytd秒.

我的第一个倾向是:

@users.sum(&:goal_ytd)
Run Code Online (Sandbox Code Playgroud)

在两种情况下都抛出了弃用警告,因为在Rails 4.1中使用sumon ActiveRecord::Relation会消失.

所以,我将代码更改为:

@users.to_a.sum(&:goal_ytd)
Run Code Online (Sandbox Code Playgroud)

然后扔了NoMethodError,因为在某些情况下,@users由分配@users = UserUser没有to_a方法.

@users使用@users = User.allthrows 分配弃用警告因为Relation#all也已弃用.

有没有办法把所有Users作为一个数组?有没有更好的办法?

daz*_*nic 32

在Rails 4.1

如果goal_ydt是users表中的列:

@users.sum(:goal_ydt)
Run Code Online (Sandbox Code Playgroud)

如果goal_ydtUser类中的方法:

@users.to_a.sum(&:goal_ydt)
Run Code Online (Sandbox Code Playgroud)

  • `@users.to_a.sum {| u | u.goal_ytd(参数)}` (2认同)

Fra*_*nez 5

我喜欢用的组合mapsum

@users.map(&:goal_ydt).sum
Run Code Online (Sandbox Code Playgroud)