Rails操作 - 处理JSON和HTML请求的正确方法是什么

时间:2012-11-09 06:10:17

标签: ruby-on-rails-3

我的应用程序目前只处理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请求不需要执行重定向等。

谢谢!

2 个答案:

答案 0 :(得分:1)

我的申请中有类似的要求。我选择为JSON API创建一组不同的控制器,因为HTML和JSON控制器的共同点很少。它还使得使用特定于API构建的Gems和JSON(在我的情况下为RocketPants)更简单。

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