Я использую find_or_initialize_by, а затем update_attributes для создания новой записи, иначе обновление, если запись уже существует.
ниже приведен фрагмент кода в Ruby.
StudentResult.find_or_initialize_by(
:course_id => course_id,
:student_id => student_id,
:assessment_id => assignment_id,
).update_attributes!(
:total_score => assignment_total_score,
:score => assignment_score
)
Но я вижу есть две записи для одной и той же комбинации course_id, student_id ,valuation_id . Это редко случается только для некоторых записей.
course_id, student_id, assessment_id , total_score, score, created_at , updated_at
7779,156035,29792,30,0,2020-02-06 13:54:30.325446,2020-02-06 13:54:30.325446
7779,156035,29792,30,0,2020-02-06 13:54:30.326769,2020-02-06 13:54:30.326769
В настоящее время у меня нет уникальных ключевых ограничений на таблицу StudentResult. Но в идеале он должен создавать только 1 запись для комбинации course_id, student_id иvaluation_id. Я скептически отношусь к тому, что это может быть связано с некоторыми условиями гонки или что-то не хватает в моем коде.