1
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放在控制器的顶部等)并不像这样工作。如何将此respond_to选项转换为使用Rails 3版本?

回答

4

Rails 3的格式:

使用的respond_to:JSON和respond_with(@用户)

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

返回整个对象模型是否存在安全风险(因为用户可以使用萤火虫控制台查看所有数据)? - 我问,因为大多数模型都会有布尔字段,您也可以存储 - 并且可能不是最好的显示用户。 – Jacob

2

尝试使用format.json而不是format.js在您的控制器和:remote => :true, :format => :json在相应的形式。

虽然,我不太确定在这种情况下是否应该使用format.jsonformat.js。由于来自Rails 3的默认脚手架生成控制器与format.json,你在做render :json作为回应,我相信format.json是正确的路要走。当你返回一段应该执行的JS时应该使用format.js

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 }