Отсутствует ошибка шаблона в Rails при экспорте файлов XLS
export_excel/app/controllers/products/products_controller.rb
class ProductsController < ApplicationController
def index
@products = Product.order(:name)
respond_to do |format|
format.html
format.csv { send_data @products.to_csv }
format.xls
end
end
end
export_excel/app/models/product.rb
require 'csv'
class Product < ActiveRecord::Base
def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |product|
csv << product.attributes.values
end
end
end
end
Индексный файл находится в:export_excel/app/views/products/index.html.erb
Частичное в:export_excel/app/views/products/_product.html.erb
Цель состоит в том, чтобы иметь возможность щелкнуть ссылку и начать загрузку файла Excel или CSV, который содержит объекты базы данных в таблице.
Когда я запускал этот код в первый раз, он работал, и у меня все еще есть загруженный файл в моей системе. Однако каждый раз после этого я получал эту ошибку:
Missing template products/index, application/index with {:locale=>[:en], :formats=>[:xls], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/Users/Candied_Island/Desktop/CPF/export_excel_tutorial/app/views"
My index.hrml.erb is in the correct place, and I believe my partial is in the correct location as well. Please help if you can, I'm not seeing why I'm getting this error.
Кроме того, если это помогает, это говорит, что моя ошибка происходит здесь:
`app / controllers / products_controller.rb: 4: in 'index'
который этот блок кода
respond_to do |format|
format.html
format.csv { send_data @products.to_csv }
format.xls
end
Спасибо!
2 ответа
Вы должны иметь файл с .xls.erb
файл для обработки запроса xls
форматы. Как ваше действие файл должен быть index.xls.erb
,
Здесь я добавляю пример контента для вас согласно RailsCast#362
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">ID</Data></Cell>
<Cell><Data ss:Type="String">Name</Data></Cell>
<Cell><Data ss:Type="String">Release Date</Data></Cell>
<Cell><Data ss:Type="String">Price</Data></Cell>
</Row>
<% @products.each do |product| %>
<Row>
<Cell><Data ss:Type="Number"><%= product.id %></Data></Cell>
<Cell><Data ss:Type="String"><%= product.name %></Data></Cell>
<Cell><Data ss:Type="String"><%= product.released_on %></Data></Cell>
<Cell><Data ss:Type="Number"><%= product.price %></Data></Cell>
</Row>
<% end %>
</Table>
</Worksheet>
</Workbook>
Rails ищет вид, а не находит его. В частности, он ищет представление в формате XLS, которое он может отобразить, потому что вы не указали никаких специальных действий для xls
формат, как у вас есть для csv
,
Вам нужно иметь index.xls[.erb]
смотреть под app/views/products
,
Ваша альтернатива состоит в том, чтобы сделать с XLS, как вы сделали для CSV:
class Product < ActiveRecord::Base
def self.to_xls
# get xls format data somehow and return it
end
end
class ProductsController < ApplicationController
def index
@products = Product.order(:name)
respond_to do |format|
format.html
format.csv { send_data @products.to_csv }
format.xls { send_data @products.to_xls }
end
end
end