rails view层的具体细节(二)

转自:http://ihower.tw/rails3/actionview.html

使用RendererController中直接回传结果

有一些格式的本质其实不需要Template引擎,只需要再Controller中直接render其结果即可,例如JSONCSV或是XMLRailsActiveRecord model提供了to_xmlto_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标签

除了 ​​上述介绍的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方法,这样就可以动态决定内容的输出与否了。

你可能感兴趣的:(rails view层的具体细节(二))