有一些格式的本质其实不需要Template引擎,只需要再Controller中直接render其结果即可,例如JSON和CSV或是XML。Rails对ActiveRecord model提供了to_xml
和to_json
方法。而CSV则可以使用FasterCSV函式库。范例如下:
require 'csv' class PeopleController < ApplicationController
def index
@people = Person.all
respond_to do |format|
format.html format.json{ render :json => @person.to_json } format.xml { render :xml => @person.to_xml }
format.csv do
csv_string = CSV.generate do |csv|
csv << ["Name", "Created At"]
@people.each do |person|
csv << [person.name, person.created_at]
end
end
render :text => csv_string
end
end
end
Ruby 1.8.7则需要在Gemfile中指定
gem "fastercsv"
,将CSV改成用FasterCSV。
除了 上述介绍的ERb标签<%= %>
会输出中间的Ruby
程式执行结果,还有一些其他用法:
<% %>
这样就不会输出任何结果,通常用在if
或回圈条件中,例如:
<% @people.each do |person| %>
<% if person.name.present? %>
<p><%= person.name %></p>
<% end %>
<% end %>
上述的<% %>
标签虽然不会输出HTML内容,但是还是在HTML原始码中换行了,为了避免输出时多余的换行,可以改用<%- -%>
。不过实际上并没有很多人在乎就是了,毕竟这不影响用户的页面。
<%# blah blah %>
这是注解,不会输出任何内容。不过如果需要整段多行注解,会常这样写:
<%- output = false -%>
<% if output %> <%= foo %>
<hr>
<%= bar %>
<% end %>
这时候只要控制output
的值就是输出的开关,稍后我们可以将output
变成一个Helper方法,这样就可以动态决定内容的输出与否了。