首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含计算的方法. Rails 4

包含计算的方法. Rails 4
EN

Stack Overflow用户
提问于 2017-01-31 17:43:27
回答 2查看 31关注 0票数 0

我只想计算用户付费参加的所有活动事件的总数。如果你能告诉我,我会很感激,因为我非常不确定。非常感谢

代码语言:javascript
复制
event.rb
has_many :payments

payment
belongs_to :event

在event.rb中,我尝试了以下方法,但没有成功

代码语言:javascript
复制
def self.active_events
    active_events = live_events.open_events
    active_events.all.each do |event|
      event.price * event.payments.count
    end
  end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-31 17:57:30

你可以简单地按照以下方式来做,

代码语言:javascript
复制
total = 0
Event.live_events.open_events.find_each { |e| total += e.price * e.payments.count }

在Event.rb中,将其放入有意义的名称的方法中。这对你有用。

代码语言:javascript
复制
def self.total_price_for_active_events
  total = 0
  Event.live_events.open_events.find_each { |e| total += e.price * e.payments.count }
  total
end

最优方式

代码语言:javascript
复制
def self.total_price_for_active_events
  Event.live_events.open_events.joins(:payments).sum("events.price")
end
票数 3
EN

Stack Overflow用户

发布于 2017-01-31 17:54:26

你的开局太好了!不幸的是,您所拥有的只是开始;您正在生成一个数组,该数组包含每个事件的总和。剩下的就是把它们加在一起:

代码语言:javascript
复制
  def self.active_events
    active_events = live_events.open_events
    costs = active_events.all.each do |event|
      event.price * event.payments.count
    end
    costs.reduce(0) do |sum,x|
      sum + x
    end
  end

你也可以得到真正的花哨和简单的使用:

代码语言:javascript
复制
costs.reduce(0, :+)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41964090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档