테이블의 모든 레코드에 대해 계산을 실행하려고합니다. 그러나 find_each를 사용하여 테이블의 모든 항목을 반복 할 때 어떤 이유로 레코드가 각각 반환되지 않습니다.레일 find_each 및 각 레코드를 반환하지 않습니다
나는 100 개의 레코드가 몇 개있는 지역에서는 발생하지 않습니다. 그러나 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에 후행 또는 선행 공백이 없는지 확인하여 찾을 수 없습니다.
"보인다"라고 쓰면 100 % 확실하지 않다고 생각합니까? 이게 사실이라고 생각하니? 또한 어떤 데이터베이스를 사용하고 있으며 어떤 종류의 기본 키/인덱스가'InventoryReport' 모델에 있습니까? –
Excel에서 계산을하고 데이터베이스에 저장된 계산과 대조하여 숫자가 꺼지면 데이터베이스의 값이 Excel에서 얻는 값보다 훨씬 적습니다. 그런 다음 데이터베이스에있는 데이터를 검사하면 거기에 실제 숫자가 있어야 할 때 여전히 값이없는 레코드가 있습니다. – Pras
어떤 데이터베이스와 유형의 기본 키를 사용하고 있습니까? 일괄 키가 주문 가능할 때만 일괄 처리가 작동하며 블록 내부의'InventoryReport'를 수정하면 다음 일괄 처리에 대한 질의가 발생합니다. –