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