таблица рельсов 3 вопрос - PullRequest
1 голос
/ 04 января 2011

Я обновил свое приложение rails 2.3.10 до Rails 3.0.3.В моем приложении у меня есть функция, как пользователь может загрузить данные в Excel.

Моя версия gem: spreadsheet-0.6.4.1

Я объявил версию gem в Gemfile и Mime :: Type.register_alias "application / excel",: xls в application.rb.и мой код генерации Excel выглядит следующим образом:

<%

book = Spreadsheet::Workbook.new
 data = book.create_worksheet :name => 'myname'
 data.row(0).concat %w{name email}
 header_format = Spreadsheet::Format.new :color => :green, :weight => :bold
 data.row(0).default_format = header_format

@names.results_data.each_with_index { |n, i|

data.row(i+1).push n.name,n.email
}

blob = StringIO.new('')
book.write(file_blob)
-%><%=blob.string%>

Мой код контроллера:

respond_to do |format|
      format.html
      format.rss
      format.xls {    
        view_output = render_to_string :action => "excel" << name
        send_data(view_output, :type=>"application/ms-excel", :filename => "name.xls")
      }

Проблема заключается в том, что при нажатии на ссылку Excel открывается окно Excel и вpopup 'name.xls [2] не может быть доступ.может быть поврежден или только для чтения ... я изменил все возможности, такие как обновление gem, изменение mime-типа, но не повезло ...

Может кто-нибудь сказать, в чем ошибка

1 Ответ

1 голос
/ 07 июня 2011

Две мысли:

  1. Нет необходимости использовать файл excel.xls.erb в виде файла erb.Вы можете легко поместить это либо в помощник, либо в другой метод текущего контроллера.Я знаю, что семантика ERb изменила связку в рельсах 3 , поэтому это может быть причиной ваших ошибок.

     def render_to_xls(names, name = 'myname')
    
      book = Spreadsheet::Workbook.new
      data = book.create_worksheet :name => name
      data.row(0).concat %w{name email}
      header_format = Spreadsheet::Format.new :color => :green, :weight => :bold
      data.row(0).default_format = header_format
    
      names.results_data.each_with_index { |n, i|
    
         data.row(i+1).push n.name,n.email
      }  
      blob = StringIO.new('')
      book.write(blob)
      blob
    end
    

    И позже, в коде вашего респондента:

        respond_to do |format|
          format.html
          format.rss
          format.xls {    
            send_data(render_to_xls(@names, name), :type=>"application/ms-excel", :filename => "name.xls")
          }
    
  2. Попробуйте выполнить сравнение предыдущего файла Excel с текущим файлом Excel и посмотрите, есть ли странные различия в пробелах или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...