2012-11-09 72 views
0

我的應用程序當前只處理HTML請求,我想擴展一些操作來處理JSON請求。許多控制器操作執行重定向,根據請求是否成功設置會話值(閃存)。Rails操作 - 處理JSON和HTML請求的正確方法

我怎麼能基於一個動作,例如申請格式包括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請求不需要執行重定向等。

謝謝!

回答

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 
1

我在我的應用程序中有類似的要求。我選擇爲JSON API創建一組不同的控制器,因爲它們與HTML和JSON控制器的共同點很少。這也使得使用特定於API構建和JSON(本例中爲RocketPants)的gem更簡單。

+0

感謝您的建議。我真的很希望複製我所有的控制器和操作是沒有必要的。 – Nick

相關問題