Вы можете сделать это, добавив простой цикл после того, как ваши «нормальные» данные добавлены в модель, и используя метод << для добавления в ассоциацию лет. </p>
...
course.value = row[3]
course.pass_mark = row[4]
5.upto(8).each do |i|
one_year = Year.find(row[i])
course.years << one_year if one_year
end
if course.save
n = n+1
...
Вы можете добавить больше проверок в цикл, если хотите убедиться, что значения действительны, и / или изменить поиск, чтобы найти свой год по-другому. Другой способ, когда связанные данные «отстают от конца», как это, состоит в том, чтобы продолжать добавлять, пока не останется ничего добавить, а также добавлять сами годы, если они еще не существуют:
...
course.value = row[3]
course.pass_mark = row[4]
row[5..-1].each do |year_id|
one_year = Year.find_or_create_by_id(year_id)
course.years << one_year
end
if course.save
n = n+1
...
Есть много разных способов сделать это, и правильный путь действительно зависит от ваших реальных данных, но это основной метод.