2013-03-05 99 views
0

這是來自互聯網的代碼,我無法理解respond_to,format.html和format.js在控制器中做了什麼。Rails respond_to在控制器中

def create 
@review = Review.create!(params[:review]) 
flash[:notice] = "Thank you for reviewing this product" 
    respond_to do |format| 
    format.html { redirect_to @review.product } 
    format.js 
end 
end 

謝謝你的時間。

拉姆亞

回答

0

的respond_to(*類型,&塊)公共 沒有網絡的服務支持,它收集的數據顯示的人的名單看起來是這樣的一個動作:

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報頭確定所需的響應格式。)

假設您有添加新用戶的操作,如果尚未存在,可選擇創建其公司(按名稱) -Services,它可能是這樣的:

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