2010-10-19 67 views
5

鑑於以下控制器:的Rails 3 - AJAX,響應JS - 如何處理錯誤

def create 
     if @mymodel.save 
     format.js 
     else 
     format.js { render :js => @mymodel.errors } 
     end 
end 

什麼了Rails處理一個.js錯誤響應方式...難道我創建的.js用不同的文件文件名僅用於服務器錯誤?

是否在.js文件中添加IF ELSE?

感謝

回答

8

這已經有一段時間,因爲這個問題被張貼 - 但我只花了一段時間搞清楚了這一點&找不到太多的幫助在這個網上,所以:

的解決方案是創建.js.erb文件 - 一個用於成功,一個用於失敗。

def create 
    @foo = Foo.new(params[:foo]) 
    if @foo.save 
     respond_to do |format| 
      format.html { redirect_to root_path } 
      format.js { render :action => "success"} #rails now looks for success.js.erb 
     end 
    else 
     respond_to do |format| 
     format.html { render :action => 'new'} 
     format.js { render :action => "failure"} #rails now looks for failure.js.erb 
     end 
    end 
    end 
end 

如果看來,如果不指定文件名,軌道將尋找在這兩種情況下create.js.erb(因爲format.js從創建一個叫做)。這對於成功/錯誤情況來說並不是很好,因爲您需要針對每種情況採用不同的行爲 - 所以通過:action屬性覆蓋文件名。