簡體   English   中英

從主應用程序調用Rails Engine的方法

[英]Calling a method of a Rails Engine from Main App

我有一個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。 有人知道我在這里做什么嗎

RoleAuthorization::SessionUser.current_user

未定義,因為您已將current_user定義為SessionUser類的實例方法。 在不完全了解您在系統其余部分中如何使用此類的情況下,以下建議可能有效,但會破壞其他方面:

RoleAuthorization::SessionUser.new.current_user(current_user)

或將自己添加到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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM