2011-02-27 44 views
3

給定了經典的控制器操作。看看MARK。我需要爲響應設置狀態碼爲200。背景:swfupload ajax文件上傳解決方案似乎以錯誤的格式發送數據。如何操作來自Rails控制器操作的響應狀態代碼

我試過response.headers ['Status'] = 200,response.status 200,render:json =>'data',:status => 200.但是響應的狀態碼並沒有改變。

def create 
    if params[:Filedata] 
    @medium = Medium.new(:swf_uploaded_data => params[:Filedata]) 
    else 
    @medium = Medium.new(params[:medium]) 
    end 

    respond_to do |format|  
    if @medium.save 
     format.html { redirect_to(@medium, :notice => 'Medium was successfully created.'); } 
     format.xml { render :xml => @medium, :status => :created, :location => @medium; }   
     MARK 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @medium.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

回答

5

狀態代碼只能返回命令中聲明喜歡渲染,redirect_to的....而且會影響到這個返回的命令,沒有辦法設置密碼所有響應

對於format.html { redirect_to(@medium, :notice => 'Medium was successfully created.'); }自是一個重定向的代碼將是一個3XX,你不能改變它或重定向不會工作

對於format.xml { render :xml => @medium, :status => :created, :location => @medium; }你聲明狀態爲創建,這意味着對於代碼爲201的rails,使它200改爲:

format.xml { render :xml => @medium, :status => :ok, :location => @medium; }

+0

鏈接到文檔:http://guides.rubyonrails.org/layouts_and_rendering.html#using-render「:status選項」可以簡單地使用'render:status => 500' – AJP 2012-12-04 18:15:24

0

AJAX調用期待的響應格式是什麼?你只是迴應HTML和XML,所以如果期望JavaScript或JSON,這可能是一個問題。

此外,我不確定這是否重要,但我從來沒有在respond_to區塊內看到如您所示的狀況。通常是這樣的:

if @medium.save 
    respond_to { |format| ... } 
else 
    respond_to { |format| ... } 
end 

我也不清楚什麼是「MARK」應該是。