Rails:导出到CSV失败

时间:2015-09-02 04:27:01

标签: 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 = 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?

2 个答案:

答案 0 :(得分:2)

将视图更改为以下内容,使用您的路径路径进行查看操作,而不是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

答案 1 :(得分:0)

@rokibul-hasan 已经回答了这个问题,但我也建议您进行一次查询以获取所有对象:

@objects = Nterm.find(ids)

并循环遍历这些对象,而不是在每个 ID 上调用 .find,因为您正在为每个记录访问数据库,这是不必要的。所以像:

@objects.each do |object|
  csv << [object.externalid, object.pos, ...]
end