2012-11-07 85 views
3

我在試圖在rails控制器中使用return時遇到問題。這是行不通的:爲什麼respond_with JSON不起作用?

class UsersController < ApplicationController 
respond_to :json 

    def create 
     @user = User.create params[:user_info] 
     respond_with @user 
    end 
end 

這工作:

class UsersController < ApplicationController 
respond_to :json 

    def create 
     @user = User.create params[:user_info] 
     respond_with @user do |format| 
       format.json { render json: @user.to_json } 
     end 
    end 
end 

爲什麼?這是我使用的一個不工作的時候必須在服務器的日誌中的錯誤:

NoMethodError (undefined method `user_url' for #<UsersController:0x007fd44d83ea90>): 
app/controllers/users_controller.rb:7:in `create' 

我的路線是:

resources :users, :only => [:create] 

回答

4

responds_with設法重新指向user_url,所以它看起來的show方法在用戶控制器,你沒有,因爲你的路線是僅限於create方法。由於默認情況下create方法重定向到show方法,因此這不起作用。但在你的第二個版本中,你實際上是在渲染一些東西,所以不會發生重定向。

你可以給一個:location選項respond_with如果這就是你想要的東西,就像這樣:

respond_with(@user, :location => home_url) 

或你在你的第二個版本確實使用了渲染的版本。

+0

我有其他的控制器使用完全相同的代碼和它的作品...唯一的區別是路由,此控制器的路線是資源:設備:只=> [:創建:更新],和它的作品!奇怪的!完全怪異! – Andres

+0

@Andres我在這裏有同樣的問題。你找到了解決方案嗎? – pedrofs

+0

我真的不記得,因爲這是相當古老的,但你可以做的只是:渲染json:your_object,這應該工作返回給你一個json – Andres