0

我的应用程序目前只处理 HTML 请求,我想扩展一些操作来处理 JSON 请求。许多控制器操作执行重定向,根据请求是否成功设置会话值(闪存)。

如何合并 responds_to 以根据请求格式更改操作行为,例如:

 def create
  @user = User.new(params[:user])      
  if @user.save
    flash[:notice] = {:success => "User Created."}
    session[:user_id] = @user.id
        session[:username] = @user.username
    redirect_to(:controller => 'lists', :action => 'index')
  else
     flash[:notice] = {:error => @user.errors}
    render('new')
  end
end

如您所见,我正在检查模型是否保持不变,然后再次重定向或呈现表单。我怎样才能保持这种当前的行为,但也可以处理 JSON 中的请求?JSON 请求不需要执行重定向等。

谢谢!

4

2 回答 2

1

我的申请中有类似的要求。我选择为 JSON API 创建一组不同的控制器,因为 HTML 和 JSON 控制器几乎没有共同点。它还使得使用特定于 API 构建和 JSON(在我的例子中为 RocketPants)的 gem 变得更简单。

于 2012-11-09T06:22:27.863 回答
1

这似乎可以解决问题:

def create
  @user = User.new(params[:user])      
  if @user.save
    flash[:notice] = {:success => "User Created."}
    session[:user_id] = @user.id
        session[:username] = @user.username
         respond_to do |format|
            format.json {render :json => @user}
            format.html{redirect_to(:controller => 'lists', :action => 'index')}
         end

  else
     flash[:notice] = {:error => @user.errors}
      respond_to do |format|
         format.json {render :json => @user.errors}
         format.html{render('new')}
      end
  end
end
于 2012-11-09T22:27:31.297 回答