为什么response_with JSON不起作用?

时间:2012-11-07 14:24:44

标签: ruby ruby-on-rails-3 rest

尝试在rails控制器中使用return时遇到问题。这不起作用:

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]

1 个答案:

答案 0 :(得分:4)

responds_with尝试重定向到user_url,因此它会在您的用户控制器中查找您没有的show方法,因为您的路由仅限于{{仅限1}}方法。由于create方法默认情况下重定向到show方法,因此不起作用。但是在你的第二个版本中,你实际上是在渲染一些东西,所以不会发生重定向。

如果这是你想要的,你可以给create :location选项,如下所示:

respond_with

或像在第二个版本中那样使用渲染版本。