在今天的30天内统计记录

时间:2014-06-04 03:02:49

标签: ruby-on-rails ruby methods

我的模型是一个具有名为date_of_opportunity的属性的商机模型。我正在尝试编写一种方法来计算今天30天内有多少机会。但是,当我尝试在控制台中调用我的方法时,我得到错误'未定义的局部变量或方法'

这是我的模特:

class Opportunity < ActiveRecord::Base
     def calculate_num_days
         num_days = 0
         @opportunity = Opportunity.all
         @opportunity.each do |opportunity|
        if (opportunity.date_of_opportunity - Date.today < 30)
            num_days = num_days + 1
            return num_days
        end
         end

        end
end

有人可以帮我弄清楚什么是错的?谢谢!

4 个答案:

答案 0 :(得分:1)

您似乎想要一个类方法,但是正在定义一个实例方法。这样做:

def self.calculate_num_days
 ...
end

答案 1 :(得分:1)

如果你能算出今天30天内有多少机会,你可以试试这个:

class Opportunity < ActiveRecord::Base

 def self.calculate_num_days(from = (Date.today-1.month).beginning_of_day,to = Date.today.end_of_day)
   where(date_of_opportunity: from..to).count
 end

end

在您的控制台上,您可以输入如下

Opportunity.calculate_num_days

输出如下:

irb(main):001:0> Opportunity.calculate_num_days
←[0m←[1m←[35m (51.0ms)←[0m  SELECT COUNT(*) FROM "opportunities" WHERE ("opportunities"."date_of_opportunity" BETWEEN '2014-05-04 00:00:00.000000' AND '2014-06-04 23:59:59.999999')
=> 2

答案 2 :(得分:0)

也许,@opportunity = Opportunity.all应为@opportunities = Opportunity.all

答案 3 :(得分:0)

除非我错过了你想要做的事情,否则我会让ActiveRecord完成繁重的工作。 Opportunity.where("date_of_opportunity - :today < 30", today: Date.today).size

免责声明,这是完全未经测试的