respond_to更改响应类型

时间:2010-07-19 15:44:19

标签: jquery ruby-on-rails ajax

我通过ajax调用控制器的创建操作,因此当对象成功保存时,会触发js响应。但是,如果对象由于验证而无法保存,那么我希望响应为html。我希望通过不在 else 块中返回js响应来实现此目的(请参阅下面的代码),但这会产生 406 Not Acceptable 错误。

关于如何做到这一点的任何想法?

我也应该注意到我之所以这样做是因为我不确定如果验证失败,如何创建一个合适的js响应......

提前致谢!!! =]

控制器创建操作

respond_to do |format|
  if @person.save
    flash[:notice] = 'Successfully created.'
    format.html { redirect_to(@person) }
    format.js
  else
    flash[:error] = 'There are errors while trying to create a new Person'
    format.html { render :action => "new" }
  end
end

1 个答案:

答案 0 :(得分:1)

如果您在URL中专门请求js格式,那么您必须为您的响应提供JS。一种选择是不在请求中指定格式,然后只过滤xhr的响应。像这样:

respond_to do |format|
  if @person.save
    flash[:notice] = 'Successfully created.'
    if request.xhr?
      format.js
    end
    format.html { redirect_to(@person) }
  else
    flash[:error] = 'There are errors while trying to create a new Person'
    format.html { render :action => "new" }
  end
end

这样,如果您在没有指定ANY格式的情况下发出请求,它将首先命中js,如果它是xhr请求(即AJAX请求),而如果有错误,它将返回html,无论如何什么。

这有意义吗?