Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 3:format.csv给出了;“无模板错误”;但是format.json不需要模板_Ruby On Rails_Ruby On Rails 3_Rendering - Fatal编程技术网

Ruby on rails rails 3:format.csv给出了;“无模板错误”;但是format.json不需要模板

Ruby on rails rails 3:format.csv给出了;“无模板错误”;但是format.json不需要模板,ruby-on-rails,ruby-on-rails-3,rendering,Ruby On Rails,Ruby On Rails 3,Rendering,为什么在没有模板的情况下呈现:json,而不是呈现:csv 在我的datapoints_控制器的索引方法中: respond_to do |format| format.json { render :json => @goal.datapoints.all } format.csv { render :csv => @goal.datapoints.all } end 将浏览器指向/datapoints.json会在屏幕上将集合呈现为json字符串。将其指向/d

为什么在没有模板的情况下呈现:json,而不是呈现:csv

在我的datapoints_控制器的索引方法中:

respond_to do |format|
  format.json { render :json => @goal.datapoints.all }      
  format.csv { render :csv => @goal.datapoints.all }
end
将浏览器指向/datapoints.json会在屏幕上将集合呈现为json字符串。将其指向/datapoints.csv会出现错误:

Template Missing: with {:locale=>[:en, :en], :formats=>[:csv],
                         :handlers=>[:rhtml, :rxml, :erb, :builder, :rjs]}
Datapoint实例响应于_csv,但即使我手动将其映射为csv格式并将其呈现为文本,也会出现模板缺失错误,例如,我尝试了以下方法:

format.csv { render @goal.datapoints.map{|d| d.to_csv }.join "\n" }

Rails附带了一系列格式的呈现器,包括json,但不包括csv。(向底部查看一系列
add
调用)。但是,创建自己的应用程序非常容易

将类似的内容放入初始化器中(这几乎是从上面链接的xml呈现器复制的,xml替换为csv):

然后,当调用
render:csv=>@foo
时,将调用此块,并将
@foo
对象作为
csv
参数传递

看看您在做什么,您可能需要使用monkey patch
Array
添加到\u csv
方法中,或者让上面的块检测并处理数组

ActionController::Renderers.add :csv do |csv, options|
  self.content_type ||= Mime::CSV
  self.response_body  = csv.respond_to?(:to_csv) ? csv.to_csv : csv
end