Ruby on rails Rails:导出到CSV失败
我正在尝试将数据导出到CSV文件。这是我的模型:Ruby on rails Rails:导出到CSV失败,ruby-on-rails,ruby,csv,ruby-on-rails-4,ruby-2.0,Ruby On Rails,Ruby,Csv,Ruby On Rails 4,Ruby 2.0,我正在尝试将数据导出到CSV文件。这是我的模型: def self.generate_csv(ids) CSV.generate({:col_sep => "\t"}) do |csv| csv << ['topfind terminus id','position','sequence','protein (uniprot ac)','topfind evidence ids'] ids.each do |id| n = Nte
def self.generate_csv(ids)
CSV.generate({:col_sep => "\t"}) do |csv|
csv << ['topfind terminus id','position','sequence','protein (uniprot ac)','topfind evidence ids']
ids.each do |id|
n = Nterm.find(id)
csv << [n.externalid,n.pos,n.protein.sequence[n.pos-1..n.pos+9],n.protein.ac,n.evidences.collect{|e| e.externalid}.join(':')]
end
end
end
这是我的观点:
<%= link_to "Export to CSV", {:method=> "show", :id => @nterm.map {|i| i.id }} %>
“show”,:id=>@nterm.map{{| i | i.id}}%>
在这种情况下,我不太确定在我的节目视图上放什么。如何生成CSV?如下更改视图,使用路由路径进行查看操作,而不是
id
,传递id
,因为它的id集合不是单个id
<%= link_to "Export to CSV", your_route_path(:format => :csv, :ids => @nterm.map {|i| i.id }}) %>
@rokibul hasan已经回答了这个问题,但我也建议您进行一次查询以获取所有对象:
@objects=Nterm.find(id)
并在这些对象中循环,而不是在每个ID上调用。查找
,因为您正在为每个记录访问数据库,这是不必要的。比如:
@objects.each do |object|
csv << [object.externalid, object.pos, ...]
end
@objects.each do| object|
csv尝试将:format=>:csv
添加到您的链接到您的建议似乎让它变得更好了,但后来我遇到了这样一个错误:NoMethodError(未定义的方法“to”#csv”):
我想我的模型可能有问题我在您的代码中没有找到类似to_csv
的方法,您可以从日志中跟踪详细信息。但是我认为没有必要使用控制器操作中调用的as\u csv
,您只需要使用send\u data@output
,就可以获得csv
,因为@output
已经为您保存了csv
数据。啊,是的,我将as\u csv
更改为以查看这是否有效。但是我接受了你的建议,只是为了把它去掉,它成功了,谢谢!欢迎@user1385816:)
def show
@output = Nterm.generate_csv(params[:ids])
#your codes goes here
end
@objects.each do |object|
csv << [object.externalid, object.pos, ...]
end