3

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

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

1 回答 1

4

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

如果这是您想要的,您可以:location选择,如下所示:respond_with

respond_with(@user, :location => home_url)

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

于 2012-11-07T15:11:18.253 回答