2010-05-03 100 views
17
respond_to do |format| 
    format.html 
    format.xml { render :xml => @mah_blogz } 
end 

respond_to do |format| 
     format.js 
end 

这是什么respond_toformat.html,format.xmlformat.js?他们的目的是什么?他们是如何工作的?在rails中'respond_to'的用例是什么?

回答

8

说你这样做是:

class UsersController < ApplicationController 

     def create 
     # 
     #your code 
     # 

     respond_to do |format| 
      format.xml {render :xml => xxx} 
      format.json {render :json => xxx} 
      format.html {render xxx} 
     end 
     end 

     def edit 
     # 
     #your code 
     # 

     respond_to do |format| 
      format.xml {render :xml => xxx} 
      format.json {render :json => xxx} 
      format.html {render xxx} 
     end 
     end 

    end 

而做的:

class UsersController < ApplicationController 

     respond_to :xml, :json, :html 

     def create 
     # 
     #your code 
     # 

     respond_with xxx 

     end 

     def edit 
     # 
     #your code 
     # 

     respond_with xxx 

     end 

    end 

并且那你如何保持代码的DRY(不要重复自己)

+1

但大部分的时候,有是其他行动。如果你不希望他们回应那些其他格式呢?只是没有在应用程序中的这些文件? (例如,对于'new'操作,不包括new.json或new.xml)?这样做有没有漏洞或不好的做法?只要没有文件可以打电话,我想应该没有问题吧? – ahnbizcad 2014-07-04 14:46:29

+2

@gwho:您可以自由地将'respond_to'调用限制为仅需使用':only'参数的操作。例如:'respond_to:json,:xml,只有:[:new,:create]'起作用。 - 或者 - 如果你不想使用':only',那么就不要写respond_with。使用'render' – Devaroop 2014-07-04 15:44:50

+1

Ah Tahnk你。这似乎是一个非常自然,频繁的使用案例。有多少博客/资源倾向于跳过它,令人惊讶,只给出了最简单的情况。 – ahnbizcad 2014-07-12 23:04:24