【问题标题】:Complex date find and inject复杂的日期查找和注入
【发布时间】:2009-12-11 23:06:10
【问题描述】:

我正在使用 Ruby on Rails 构建一个财务报告应用程序。在应用程序中,我有每月财务报表对象(以“收入”作为属性)。对于任何单一的财务报表,我想显示 (1) 年初至今的收入,和 (2) 去年年初至今的收入(日历年很好)。每个对象还有一个名为“月”的日期(不是日期时间)属性(注意“月”变量名与“月”方法名混淆...也许我应该更改该变量名)。

所以...

我认为我需要 (1) 在适当的日期范围内“找到”财务报表数组(即对象),然后 (2) 对“收入”字段求和。到目前为止,我的代码是...

def ytd_revenue
  # Get all financial_statements for year-to-date.
      financial_statements_ytd = self.company.financial_statements.find(:all, 
      :conditions => ["month BETWEEN ? and ?", "self.month.year AND month.month = 1",
      "self.month.year AND self.month.month" ])
  # Sum the 'revenue' attribute
      financial_statements_ytd.inject(0) {|sum, revenue| sum + revenue }

结束

这不会破坏应用程序,但会返回不正确的“0”。

任何想法或帮助将不胜感激!

【问题讨论】:

    标签: ruby find sum conditional-statements inject


    【解决方案1】:

    这个语句可以做你想做的:

    financial_statements_ytd.inject(0) {|sum, statement| sum + statement.revenue }
    

    【讨论】:

      【解决方案2】:

      您也可以查看ActiveRecord's sum class method - 您可以传入字段名称和条件以获取总和。

      【讨论】:

        【解决方案3】:

        financial_statement 对象中包含您想要的值的字段的名称是什么? 假设字段名称为ammount 那么只需将inject 语句修改为:

        financial_statements_ytd.inject {|sum, revenue| sum + revenue.ammount }
        

        【讨论】:

          猜你喜欢
          • 2019-02-27
          • 2015-07-17
          • 1970-01-01
          • 1970-01-01
          • 2018-01-20
          • 2014-04-30
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          相关资源
          最近更新 更多