从主应用程序调用Rails引擎的方法

时间:2014-01-30 18:07:23

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

我有一个Rails引擎,并在{Rails_engine} /lib/role_authorization/session_user.rb

中有以下内容
  module RoleAuthorization
        class SessionUser
          mattr_accessor :current_user, :role

        def current_user(user)
          current_user = user
        end

        def roles(role)
          role = roles
        end      
       end
      end

我从main_application调用以下方法 {main_app} /errors/application_errors.rb

class ApplicationErrors

    def self.access_denied error, controller

     RoleAuthorization::SessionUser.current_user(current_user)

    end

但是我在这里得到一个未定义的方法current_user。有没有人知道我在这做什么

1 个答案:

答案 0 :(得分:1)

RoleAuthorization::SessionUser.current_user

未定义,因为您在SessionUser类上将current_user定义为实例方法。如果你不确切知道如何在系统的其他部分使用这个类,那些以下建议可能会有效,但会破坏别的东西:

RoleAuthorization::SessionUser.new.current_user(current_user)

或将self添加到SessionUser中的方法声明:

module RoleAuthorization
  class SessionUser
    class << self
      attr_accessor :current_user, :role

      def current_user(user = nil)
        self.current_user ||= user
      end
    end
  end
end

注意我已将mattr_accessor更改为attr_accessor。这是因为前者仅适用于模块,而您在类中调用它。然后我用class << self打开单例类,这样我就可以将current_user定义为类方法,并使用attr_accessor来访问类实例变量。将用户分配给self.current_user现在可以通过以下方式进行访问:RoleAuthorization::SessionUser.current_user