我的模型是一个具有名为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
有人可以帮我弄清楚什么是错的?谢谢!
答案 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
免责声明,这是完全未经测试的