Rails:导出到 CSV 失败
Rails: Exporting to CSV failing
我正在尝试将我的数据导出到 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 = 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
这是调用此方法的模型的控制器:
def show
puts "id search: [#{params[:id]}]"
@output = Nterm.generate_csv(params[:id])
respond_to do |format|
format.html
format.csv { send_data @output.as_csv }
end
p @output
end
这是我的观点:
<%= link_to "Export to CSV", {:method=> "show", :id => @nterm.map {|i| i.id }} %>
在这种情况下,我不太确定在我的展示视图中放什么。如何生成 CSV?
如下更改您的视图,使用您的路由路径进行视图操作,而不是 id
,传递 ids
,因为它的 ID 集合不是单个 ID。
<%= link_to "Export to CSV", your_route_path(:format => :csv, :ids => @nterm.map {|i| i.id }}) %>
幻灯片更改需要您的操作如下,以便接收 ids
def show
@output = Nterm.generate_csv(params[:ids])
#your codes goes here
end
@rokibul-hasan 已经回答了这个问题,但我也建议您进行一次查询以获取所有对象:
@objects = Nterm.find(ids)
并循环遍历这些对象,而不是对每个 ID 调用 .find
,因为您正在为每条记录访问数据库,这是不必要的。所以像:
@objects.each do |object|
csv << [object.externalid, object.pos, ...]
end
我正在尝试将我的数据导出到 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 = 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
这是调用此方法的模型的控制器:
def show
puts "id search: [#{params[:id]}]"
@output = Nterm.generate_csv(params[:id])
respond_to do |format|
format.html
format.csv { send_data @output.as_csv }
end
p @output
end
这是我的观点:
<%= link_to "Export to CSV", {:method=> "show", :id => @nterm.map {|i| i.id }} %>
在这种情况下,我不太确定在我的展示视图中放什么。如何生成 CSV?
如下更改您的视图,使用您的路由路径进行视图操作,而不是 id
,传递 ids
,因为它的 ID 集合不是单个 ID。
<%= link_to "Export to CSV", your_route_path(:format => :csv, :ids => @nterm.map {|i| i.id }}) %>
幻灯片更改需要您的操作如下,以便接收 ids
def show
@output = Nterm.generate_csv(params[:ids])
#your codes goes here
end
@rokibul-hasan 已经回答了这个问题,但我也建议您进行一次查询以获取所有对象:
@objects = Nterm.find(ids)
并循环遍历这些对象,而不是对每个 ID 调用 .find
,因为您正在为每条记录访问数据库,这是不必要的。所以像:
@objects.each do |object|
csv << [object.externalid, object.pos, ...]
end