如何转换此respond_to选项以使用Rails 3版本?

时间:2011-11-20 10:32:09

标签: ruby-on-rails json ruby-on-rails-3.1 respond-to respond-with

respond_to do |format|
  if @user.save
    format.js { render :nothing => true, :status => :ok, :location => @user }
  else
    format.js { render :json => @user.errors, :status => :unprocessable_entity }
  end
end

我尝试过的所有选项(比如将respond_to :js放在控制器的顶部等)都不像以前那样工作。

3 个答案:

答案 0 :(得分:4)

Rails 3格式:

使用 respond_to :json和 respond_with (@ user)

  respond_to :json  # You can also add  , :html, :xml  etc.

  def create
    @user= User.new(params[:user])
      #---For html flash
      #if @user.save
      #  flash[:notice] = "Successfully created user."
      #end
    respond_with(@user)
  end

# Also, add :remote => :true, :format => :json to the form.

答案 1 :(得分:2)

尝试在控制器中使用format.json代替format.js,并在相应的表单中使用:remote => :true, :format => :json

尽管如此,我不太确定在这种情况下是应该使用format.json还是format.js。由于Rails 3的默认脚手架生成带有format.json的控制器而您正在做render :json作为响应我相信format.json是正确的方法。当你返回一块应该执行的JS时,应该使用format.js

答案 2 :(得分:1)

您请求的网址应以.json结尾,如下所示:/controller/action.json

如果不可能:

发送ajax请求时,您应将'accepts'参数设置为'application/json'

在此处搜索'accepts'的使用方式:http://api.jquery.com/jQuery.ajax/

在服务器端:

format.json { render :json => @user.errors, :status => :unprocessable_entity }