予測と結果を比較するときにスコアを割り当てるレーキ タスクがあります。現時点では、予測 has_one :result のように関係が has_one です。
これを予測 has_many :results に変更したいと思います。私のタスクは次のようになります
namespace :grab do
task :scores => :environment do
Prediction.all.each do |prediction|
score = points_total prediction, prediction.result
allocate_points prediction, score
end
end
end
def points_total(prediction, result)
wrong_predictions = [prediction.home_score - result.home_score, prediction.away_score - result.away_score]
wrong_predictions = wrong_predictions.reject { |i| i == 0 }.size # returns 0, 1 or 2
case wrong_predictions
when 0 then 3
when 1 then 1
else 0
end
end
def allocate_points(prediction, score)
prediction.update_attributes!(score: score)
end
タスクを実行している瞬間にエラーが発生します
undefined method result for Prediction Class
したがって、 has_many 関係を使用すると、次の方法で結果属性にアクセスできます
prediction.result.home_score
それとも私はどこかで混乱していますか?新しい関係に合わせてレーキ タスクをリファクタリングする方法がわからない
アドバイスをいただければ幸いです
編集
@andrunix から以下のアドバイスを受け取った後でも、レーキ タスクに適用する方法を理解できないようです。
namespace :grab do
task :scores => :environment do
Prediction.all.each do |prediction|
score = points_total prediction
allocate_points prediction, score
end
end
end
def points_total prediction
prediction.results.each do |result|
result_h = result.home_score
result_a = result.away_score
wrong_predictions = [prediction.home_score - result_h, prediction.away_score - result_a]
wrong_predictions = wrong_predictions.reject { |i| i == 0 }.size # returns 0, 1 or 2
case wrong_predictions
when 0 then 3
when 1 then 1
else 0
end
end
end
def allocate_points prediction, score
prediction.update_attributes!(score: score)
end