respond_with抛出NoMethodError

时间:2015-01-01 04:13:53

标签: ruby-on-rails ruby api rest nosuchmethoderror

我根据railscast 350-rest-api-versioning构建rails webservice API

如果您无法访问此截屏视频,here is the github repo包含其源代码。

但我无法让它发挥作用。我在模块中定义了User的子类,并将其用于respond_with。我尝试时会抛出NoMethodError。 代码如下所示:

module Api
  module V1

    class SessionsController < ApplicationController
      respond_to :json
      skip_before_filter  :verify_authenticity_token

      class User < ::User
        def as_json(options={})
          super(only: [:id, :email])
        end
      end

      def create
          user = User.authenticate(params[:email], params[:password])
          if user
            # render json: user_json(user), status: 201
            respond_with user
          else
            render status: 401, json: { success: false, error_msg: 'Wrong email or password' }
          end
      end
    end

  end
end

路线:

namespace :api, defaults: {format: 'json'} do
  scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
    resources :sessions
    resources :users
    post 'login' => 'sessions#create', as: 'login'
  end
end

当我使用正确的电子邮件和密码发布/api/login时,它会显示

  

NoMethodError(未定义的方法api_v1_sessions_controller_user_url' for #<Api::V1::SessionsController:0x007f9451f72488>): app/controllers/api/v1/sessions_controller.rb:19:in创建&#39;

当我注释掉类User定义时,它工作正常,但结果json将包含用户的每个实例变量,包括passwordpassword_hash等。 我尝试将类定义从SessionsController移出模块V1,然后移动

  

NoMethodError(未定义的方法api_v1_user_url' for #<Api::V1::SessionsController:0x007f94534e6788>): app/controllers/api/v1/sessions_controller.rb:18:in创建&#39;

被抛出。这很奇怪,因为我几乎完全像Ryan在截屏视频中所做的那样。

0 个答案:

没有答案