Bee*_*Bee 5 rendering ruby-on-rails ruby-on-rails-3
为什么这会渲染:json没有模板,但不渲染:csv?
在我的datapoints_controller的索引方法中:
respond_to do |format|
format.json { render :json => @goal.datapoints.all }
format.csv { render :csv => @goal.datapoints.all }
end
Run Code Online (Sandbox Code Playgroud)
将我的浏览器指向/datapoints.json会将该集合呈现为屏幕上的json字符串.将它指向/datapoints.csv会出错:
Template Missing: with {:locale=>[:en, :en], :formats=>[:csv],
:handlers=>[:rhtml, :rxml, :erb, :builder, :rjs]}
Run Code Online (Sandbox Code Playgroud)
Datapoint的一个实例响应to_csv,但即使我手动将其映射为csv格式并将其呈现为文本,它也会产生模板缺失错误,因此,例如我尝试过这样的事情:
format.csv { render @goal.datapoints.map{|d| d.to_csv }.join "\n" }
Run Code Online (Sandbox Code Playgroud)
mat*_*att 10
Rails附带了一系列格式的渲染器,包括json,但不包括csv.这是它们在rails源中指定的位置(向下看一系列add调用).虽然创建自己的很容易.
把这样的东西放到初始化器中(这几乎只是从上面链接的xml渲染器中复制而来,用csv替换xml):
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
Run Code Online (Sandbox Code Playgroud)
然后,当您调用render :csv => @foo此块时,将调用此@foo对象作为csv参数传递.
看看你在做什么,你可能需要修补补丁Array来添加to_csv方法,或者让上面的块检测并处理数组.
| 归档时间: |
|
| 查看次数: |
3155 次 |
| 最近记录: |