Rails 3 - AJAX,响应JS - 如何处理错误

时间:2010-10-19 05:26:20

标签: ruby-on-rails ruby-on-rails-3

给出以下控制器:

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

处理.JS错误响应的Rails方法是什么...我是否只为服务器错误创建了具有不同文件名的.js文件?

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

感谢

1 个答案:

答案 0 :(得分: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 

如果你没有指定文件名,那么rails会在两种情况下都寻找create.js.erb(因为format.js是从create中调用的)。在成功/错误情况下这不是很好,因为您希望每个方案具有不同的行为 - 因此通过:action属性覆盖文件名。