Ruby on Rails: экспорт xlsx экспортирует все html страницы вместо запрошенных данных - PullRequest
1 голос
/ 30 апреля 2019

Я использую rails 4.2, и использую самоцветы axlsx и axlsx_rails Я собираюсь перейти на рельсы 5 в ближайшее время, но сейчас я использую эту версию.

Что я хочу: Экспортировать файл xlsx из запроса, используя axls_rails gem

Что я получаю вместо этого: вместо этого экспортируется весь HTML-файл в виде данных, см. Рисунок:

enter image description here

Я следовал трем различным руководствам в качестве документации git и уже несколько раз отлаживал ее, но не нашел проблемы. Надеюсь, что кто-то здесь может помочь мне понять, что вызвало это.

Gemfile:

gem 'rails', '4.2.11'

# import/export xlsx gems
gem 'write_xlsx'
gem 'rubyzip', '>= 1.2.1'
gem 'axlsx', git: 'https://github.com/randym/axlsx.git', ref: 'c8ac844'
gem 'axlsx_rails'

HTML-файл:

= link_to "<i class='icon icon-file-down'></i> Export</a></li>".html_safe, server_report_system_reports_path(format: :xlsx)

файл контроллера:

def server_report
    organization_id = params[:organization_id]
    @accounts = Admin::Account.where("organization_id = ?", organization_id) unless organization_id.blank?
    @accounts_paginated = @accounts.paginate(per_page: 10, page: params[:page] || 1 )
   
    respond_to do |format|
      format.html
      format.xlsx {
        response.headers['Content-Disposition'] = 'attachment; filename="server_report.xlsx"'
      }
    end
  end

xlsx.axlsx file:

wb = xlsx_package.workbook
wb.add_worksheet(name: "Accounts") do |sheet|

  sheet.add_row ["Account id", "Member id", "Member name", "Member email"]
  @accounts_paginated.each do |account|
    account.members.each do |member|
      sheet.add_row [account.id, member.id, member.name, member.email]
    end
  end
end

EDIT: Я попытался вызвать другой def с именем export и попытаться выяснить, есть ли проблема с response_to и использовать другой запрос, но он также сделал то же самое

Я также пытался записать в format.xlsx эту строку, но ничего не изменилось:

РЕДАКТИРОВАТЬ 2: Я попытался отрисовать в response_to файл вместо этого в файле axlsx.xlsx в формате .xlsx, но я получил тот же результат

response.headers ['Content-Disposition'] = 'attachment; имя файла = "server_report.xlsx" '

1 Ответ

0 голосов
/ 06 мая 2019

Я нашел проблему. Я добавил макет: false, когда я рендерил файл xlsx в контроллере, и он работал

...