У меня есть приложение для отметки, которое позволяет учителям отмечать поступившие на работу ученики по результатам.
Заявка может либо частично соответствовать, либо полностью соответствовать результатам.
Таким образом, SubmissionX может полностью соответствовать Outcome1частично соответствуют Outcome2 и не соответствуют Outcome3
Таким образом, таблицы выглядят примерно так:
Представление
id
title
....
SubmissionOutcome
submission_id
output_id
частично_met (true / false)
полностью_мет (true / false)
Результат
id
title
.....
Я показываю список всех результатов в курсе.И учитель может проверить, был ли результат частично достигнут или полностью достигнут.
Поскольку я добавляю дополнительную информацию в таблицу соединений (частично или полностью), я в настоящее время перебираю каждый из результатов, еслипредставление не относится к этому результату. Я его создаю:
def initialized_submission_outcomes(unit:, outcome_group: )
[].tap do |o|
unit.outcomes.where(outcome_group: outcome_group).find_each do |outcome|
if submission_outcome = this_submissions_current_outcomes.find_by(outcome: outcome)
o << submission_outcome.tap {|submission_outcome| submission_outcome.enable ||= true }
else
o << SubmissionOutcome.new(outcome: outcome)
end
end
end
end
и затем приводим в порядок возвращенные параметры в контроллере в before_action:
params[:submission][:submission_outcomes_attributes].values.each do |evidence_attr|
evidence_attr[:_destroy] = true if (evidence_attr[:enable] != '1' && evidence_attr[:partially_met] != '1')
end
Это превращается в кошмар для n + 1 задач.Некоторые курсы могут иметь 400 результатов, поэтому для загрузки формы требуется возраст (25 секунд +).
Мне бы очень понравилось, если бы кто-нибудь мог указать мне на более эффективный способ решения проблемы.
Большое спасибо