respond_to(*types, &block) public 如果没有 Web 服务支持,收集数据以显示人员列表的操作可能如下所示:
def index
@people = Person.find(:all)
end
这是相同的操作,其中包含 Web 服务支持:
def index
@people = Person.find(:all)
respond_to do |format|
format.html
format.xml { render :xml => @people.to_xml }
end
end
这就是说,“如果客户想要 HTML 来响应这个动作,就像我们以前一样做出响应,但是如果客户想要 XML,则以 XML 格式返回他们的人员列表。” (Rails 根据客户端提交的 HTTP Accept 标头确定所需的响应格式。)
假设您有一个添加新人的操作,如果该公司尚不存在,则可以选择创建他们的公司(按名称),没有 Web 服务,它可能如下所示:
def create
@company = Company.find_or_create_by_name(params[:company][:name])
@person = @company.people.create(params[:person])
redirect_to(person_list_url)
end
这是相同的操作,其中包含 Web 服务支持:
def create
company = params[:person].delete(:company)
@company = Company.find_or_create_by_name(company[:name])
@person = @company.people.create(params[:person])
respond_to do |format|
format.html { redirect_to(person_list_url) }
format.js
format.xml { render :xml => @person.to_xml(:include => @company) }
end
end
如果客户端需要 HTML,我们只需将它们重定向回人员列表。如果他们想要 Javascript (format.js),那么这是一个 RJS 请求,我们渲染与此操作关联的 RJS 模板。最后,如果客户需要 XML,我们将创建的人员呈现为 XML,但有一点不同:我们还在呈现的 XML 中包含了该人的公司,因此您会得到如下内容:
http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to