テーブル内のすべてのレコードに対して計算を実行しようとしています。しかし、何らかの理由で、find_eachを使用してテーブル内のすべての項目を繰り返し処理するか、レコードの一部が返されません。Rails 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'を変更すると、次のバッチのクエリにグリッチが発生する可能性があります。 –