安装了gem acts_as_xlsx
后,我无法看到如何返回活动记录中的相关字段。
class Ticket < ActiveRecord::Base
acts_as_xlsx :columns => [:customer_name ]
attr_accessible :customer_id, :account_id, :first_weight, :ticket_no, :second_weight, :net_weight, :product_id, :vehicle_id, :customer_name, :vehicle_reg, :product_details, :weight
belongs_to :customer
belongs_to :vehicle
belongs_to :product
belongs_to :account
当使用tickets.xlsr生成文件时,我得到cutomer_id的结果,即30不是客户名称,而是如何返回名称?
控制器
def report
@q = @gaurd.ticket.where("net_weight > 0").paginate(:page => params[:page], :per_page => 10).search(params[:q])
@ticket = @q.result(distinct: true)
respond_to do |format|
format.html
format.xlsx {
xlsx_package = @ticket.to_xlsx
begin
temp = Tempfile.new("report.xlsx")
xlsx_package.serialize temp.path
send_data xlsx_package.to_stream.read, :filename => 'tickets.xlsx', :type=> "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
ensure
temp.close
temp.unlink
end
}
end
end
我一天中的大部分时间都在尝试,但是无法下载比customer_id等字段数据更多的内容,而不是相关的ticket.customer.name
答案 0 :(得分:1)
我发现显示来自其他表的字段的技巧是指定列,然后指定您使用的列名:'external_table:field_name',例如:
send_data xlsx_package.to_stream.read, :filename => 'tickets.xlsx',
:type => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
:columns => [:id, :'customer.name', :account_id]
如果客户有时可用,则报告将失败。此问题的替代方法是创建一个引用customer.name的方法,并在不存在客户关系的情况下返回诸如“No customer”之类的值。
或者,您可以动态生成xlsx文件并指定其他逻辑。有关详细信息,请参阅文档。
答案 1 :(得分:-1)
这是导出XLS http://railscasts.com/episodes/362-exporting-csv-and-excel
的优秀轨道广播怎么做。 在 config / application.rb
中 require 'csv'
<%= link_to "Excel", model_path(format: "xls") %>
model_controller.rb
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_csv(col_sep: "\t") }
end
end
models / model.rb
def self.to_csv(options = {})
CSV.generate(options) do |csv|
csv << column_names
all.each do |product|
csv << model.attributes.values_at(*column_names)
end
end
end
这是非常重要的
config / initializers / mime_types.rb
Mime::Type.register "application/xls", :xls
views / models / index.xls.erb
<?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>
<% @models.each do |model| %>
<Row>
<Cell><Data ss:Type="Number"><%= model.id %></Data></Cell>
<Cell><Data ss:Type="String"><%= model.name %></Data></Cell>
<Cell><Data ss:Type="String"><%= model.released_on %></Data></Cell>
<Cell><Data ss:Type="Number"><%= model.price %></Data></Cell>
</Row>
<% end %>
</Table>
</Worksheet>
</Workbook>
使用此功能,您可以轻松导出到XLS文件