Как правильно в Rails преобразовывать HTML в строку для JSON объекта?
Очень сложно что-то разобрать, конечно. А что должно находиться в ключе files, мой мозг, лично, за 2 минуты скомпилировать не смог.
Разбейте "рефакторинг", если это можно так назвать, на такие шаги:
1. Забейте на HTML партиал
2. Вместо того, что б собирать текстовый JSON вручную во вьюхе, соберите руби-хэш в контроллере и вызовите на нем to_json. Например:def my_action
  res = {
    description: @homework.description,
    ...
    html_id: "homework#{@homework.id}"
  }
  res[:tag] = @homework.subject_id if @homework.subject_id
end
3. Добейтесь, что б res.to_json выдавал необходимый результат.
4-а. Почитайте про each_with_index
4-б. Почитайте про Rails Rendering Collections, пункт 3.4.5
4. Допишите и добейтесь, что б работало:res[:files] = render @homework.attachments
5. В идеале, засуньте это все в модель. Например, переопределите для Homework метод to_json. Отличие будет только в том, что render нужно будет вызывать как-то типа ActionController::Base.new.render(...)
Вам нужен jbuilder (DSL для генерации json'а) или active_model_serializers (реализует объектный подход к генерации json'а)