gpt4 book ai didi

ruby-on-rails - rails 3 : format. csv 给出 "no template error"但 format.json 不需要模板

转载 作者:行者123 更新时间:2023-12-04 17:27:33 24 4
gpt4 key购买 nike

为什么这可以在没有模板的情况下渲染:json,但不能渲染:csv?

在我的 datapoints_controller 的索引方法中:

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 的一个实例响应 to_csv,但即使我手动将其映射为 csv 格式并将其呈现为文本,它也会给出模板缺失错误,例如我试过这样的事情:
format.csv { render @goal.datapoints.map{|d| d.to_csv }.join "\n" }

最佳答案

Rails 带有许多格式的渲染器,包括 json,但不包括 csv。 Here's where they are specified in the rails source (查看底部的一系列 add 调用)。不过,创建自己的非常容易。

将这样的内容放入初始化程序中(这几乎只是从上面链接中的 xml 渲染器中复制的,将 xml 替换为 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

那么当你调用 render :csv => @foo这个 block 将被调用, @foo作为 csv 传递的对象范围。

看看你在做什么,你可能需要猴子补丁 Array添加 to_csv方法,或使上述 block 检测和处理数组。

关于ruby-on-rails - rails 3 : format. csv 给出 "no template error"但 format.json 不需要模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844033/

24 4 0