我有一个Campaign型号的has_many个项目.

每一件都有:quantity:price

我想计算一下这次活动的总价.

我试过了,但没用.

  def campaign_subtotal(campaign)
    return campaign.items.sum(item.price * item.quantity)
  end

如何处理这一问题?

非常感谢

推荐答案

天真的实现是:

class Campaign < ApplicationRecord
  has_many :items
  def subtotal
    items.sum { |item| item.price * item.quantity }
  end
end

您有点接近了,但您需要传递一个块来计算每一项的总和.使其成为实例方法而不是帮助器也更有意义.

但是,如果您想要在数据库查询中使用小计,或者想要有效地显示一系列活动,您可能希望在SQL中使用子查询、窗口查询或横向联接来计算小计.您还应该考虑记录每行的价格(小计),而不是一直重新计算它.

Ruby-on-rails相关问答推荐

在控制器操作中适当使用ActiveModel Dirty

Ruby on Rails 更新触发了 Mailer 函数中的 ArgumentError

使用嵌套属性时如何自动将父 ID 分配为外键?

params.permit ruby​​3.2.1 更新后 Active::Record 的未定义方法=~

Ruby:如何通过谓词将一个集合拆分为 ruby​​ 中的两个集合?

Rails - 如何从模型中查询 has_many

Rails 7 共享刺激控制器功能

Ruby 3 动态关键字参数

从 rails 5 迁移到 rails 6

Selenium chromedriver:无法从不可键入的键构造KeyEvent

Rails:关于yields

Factory Girl + Mongoid 在fixture 中嵌入文档

带有 Cucumber 和 rspec 的 BDD - 这什么时候是多余的?

Rails Mailer Net::OpenTimeout: execution expired 仅在生产服务器上出现异常

Rails:仅当值存在时如何验证格式?

使用回形针使用 Activeadmin Rails 上传文件

登录delay_job?

将 Rails 服务器绑定到 0.0.0.0 能给你带来什么?

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?

您如何查看 ruby​​ 中的调用堆栈示例?