2010-10-19 63 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属性覆盖文件名。