我正在尝试对表中的所有记录运行计算。但由于某些原因,当我使用find_each迭代表中的所有项目时,或者不返回每个记录。
在我有几百条记录的地方不会发生这种情况。但是每当我尝试在Heroku上运行它时,它似乎都跳过了一些记录。
我尝试针对未处理的个别记录运行代码,并按预期处理它们。但是只要我把它放入find_each循环就不行了。
我也尝试过使用IneventoryRecord.all.each,但这似乎有同样的问题。
我还尝试打印出我知道未在结果中显示的记录,但没有打印任何项目,因此出于某种原因看起来记录被跳过了。
知道我可能做错了什么吗?
代码
class InventoryReportTable::AverageForecast
def generate
iterate_inventory_reports
end
private
def iterate_inventory_reports
InventoryReport.find_each do |inventory_report|
average_lag_1_forecast = average_three_month_forecast(inventory_report.product_number, 1)
average_lag_2_forecast = average_three_month_forecast(inventory_report.product_number, 2)
inventory_report.average_lag_1_forecast = average_lag_1_forecast
inventory_report.average_lag_2_forecast = average_lag_2_forecast
inventory_report.save
end
end
def forecasts(product_number, lag)
extract_date_target_month_start = current_month_beginning - lag.month
Forecast
.where( extract_date: extract_date_target_month_start..extract_date_target_month_start.end_of_month )
.where(final: true)
.where( product_number: product_number )
.where( month: current_month_beginning..(current_month_beginning + 3.months) - 1.day )
.group(:month)
.sum(:quantity)
end
def average_three_month_forecast(product_number, lag)
hash_helper = Helpers::Hash.new
return hash_helper.average_hash( forecasts(product_number, lag) )
end
# Helper methods
def current_month_beginning
Date.today.beginning_of_month
end
def days_in_a_month
return 20
end
end
修改
我进行了一些测试,看看我是否能找出问题所在。
我跑了一个简单的
InventoryReport.find_each do |inventory_report|
puts inventory_report.product_number
end
循环以查看是否存在导致问题的无效字符,但情况似乎并非如此。
我还检查过以确保product_number中没有尾随或前导空格,但我找不到任何空格。
答案 0 :(得分:0)
我终于弄清楚出了什么问题。我正在使用rake在Heroku上运行此代码。 InventoryReport表相当大,所以rake在Heroku上超时。虽然没有任何错误。
我最终将代码移动到后台工作,并且完美运行。