Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:导出到CSV失败_Ruby On Rails_Ruby_Csv_Ruby On Rails 4_Ruby 2.0 - Fatal编程技术网

Ruby on rails Rails:导出到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

我正在尝试将数据导出到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 
这是我的观点:

<%= 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