通过模块进行版本控制时,为什么我的方法不被识别并发送NoMethodError?

时间:2014-05-14 15:21:15

标签: ruby-on-rails versioning nomethoderror

在controllers / api / v1 / sessions_controller.rb中我有......

module Api
    module V1
        class SessionsController < ApplicationController
            respond_to :json
            skip_before_filter :verify_authenticity_token

            def create
                @user = User.find_by(email: params[:session][:email].downcase)
                if @user && @user.authenticate(params[:session][:password])
                    token = User.new_remember_token
                    sign_in @user, token

然后在helpers / api / v1 / sessions_helper.rb中我有......

module Api
    module V1
        module SessionsHelper
            def sign_in (user, token)
                user.update_attribute(:remember_token, User.digest(token))
                self.current_user = user
            end
        end
    end
end

当我尝试POST到Sessions时,我收到以下错误。

NoMethodError (undefined method `sign_in' for #<Api::V1::SessionsController:0x0000010324d278>):
  app/controllers/api/v1/sessions_controller.rb:12:in `create'

为什么我收到此错误?这不正确吗?

1 个答案:

答案 0 :(得分:2)

helper的{​​{1}}类中定义的方法可以直接访问仅在相应的视图(相同资源)和不在控制器中 ,因此您需要在控制器中包含resource模块显式才能访问这些辅助方法。

helper

您收到错误是因为module Api module V1 class SessionsController < ApplicationController include Api::V1::SessionsHelper ## Add this ## ... end end end 不知道Api::V1::SessionsController方法是否存在。