如何动态生成 url(用于生成 xls 报告)? [英] How I can dynamically generate url ( for generating xls report )?
问题描述
你好!
我遇到了这个问题:我正在按日期搜索报告,在 html 视图中一切正常,但是当我渲染 xls 视图时出现错误,因为它没有收到参数,所以我需要在 URL 中传递它们对于 xls link_to 生成器.
我的控制器:
Hello!
I have this trouble: I'm searching reports by date and in html view everything is alright, BUT when I'm rendering xls view error appear, because it didn't receive params, so I need to pass them in URL for xls link_to generator.
My controller:
def show
@website = Website.find(params[:id])
if params[:report] && params[:report][:start_date] && params[:report][:end_date]
#search_by_created_at
@performance_reports = @website.performance_reports.where("created_at between ? and ?", params[:report][:start_date].to_date, params[:report][:end_date].to_date)
else
@performance_reports = @website.performance_reports
end
respond_to do |format|
format.html # index.html.erb
format.xls
format.xml { render :xml => @performance_reports }
end
end
我生成的网址如下:
http://127.0.0.1:3000/websites/25/performance_reports/show?utf8=%E2%9C%93&report[end_date]=07%2F09%2F2012&report[start_date]=04%2F09%2F2012&commit=Run+Report
我的 xls url 是这样生成的:
mine xls url is generated like this:
<%= link_to url_for(:format => 'xls') do%>
<%= image_tag("excel.png", :id => "analytics",:size => '21x23')%> <b>Export</b>
<% end %>
结果:
http://127.0.0.1:3000/websites/25/performance_reports/show
任何帮助将不胜感激.
推荐答案
xls in 默认不可用.
xls in not available by default.
添加:
gem "spreadsheet"
gem "to_xls", :git => "https://github.com/dblock/to_xls.git", :branch => "to-xls-on-models"
通过添加以下内容在 config/initializers/mime_types.rb
中注册 Excel MIME 类型:
Register the Excel MIME type in config/initializers/mime_types.rb
by adding this:
Mime::Type.register "application/vnd.ms-excel", :xls
将 as_xls 方法添加到要为所需字段导出的模型.例如,对于 User
模型,您可能有:
Add an as_xls method to model that you want to export for the fields you want.
For example for a User
model you might have:
def as_xls(options = {})
{
"Id" => id.to_s,
"Name" => name,
"E-Mail" => email,
"Joined" => created_at,
"Last Signed In" => last_sign_in_at,
"Sign In Count" => sign_in_count
}
end
向控制器添加代码:
def index
@users = User.all
respond_to do |format|
format.html
format.xls { send_data @users.to_xls, content_type: 'application/vnd.ms-excel', filename: 'users.xls' }
end
end
提供链接:
= link_to 'Export', users_path(request.parameters.merge({:format => :xls}))
所有代码都应该有一个测试.你可以这样做:
All code should have a test. You could do something like this:
describe "GET index.xls" do
it "creates an Excel spreadsheet with all users" do
user = Fabricate :user
get :index, :format => :xls
response.headers['Content-Type'].should == "application/vnd.ms-excel"
s = Spreadsheet.open(StringIO.new(response.body))
s.worksheets.count.should == 1
w = s.worksheet(0)
w.should_not be_nil
w.row(0)[0].should == "Id"
w.row(1)[0].should == user.id.to_s
w.row(0)[1].should == "Name"
w.row(1)[1].should == user.name
end
end
这篇关于如何动态生成 url(用于生成 xls 报告)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!