簡體   English   中英

如何在Ruby中獲取當前的實例模塊

[英]How to get the current instance module in Ruby

該標題並不能真正解釋所有內容,因此請繼續。 我有兩個共享某些功能(即用戶模型和身份驗證)的Rails引擎。 我有一個基本的User類,然后是從每個應用程序的該基本類繼承的其他兩個User類,如下所示:

class User; end
class App1::User < ::User; end
class App2::User < ::User; end

我的身份驗證具有與以下類似的方法

def user_from_session
  User.find_by_id(session[:user_id])
end

這包含在我的application_controller中。 我的問題是,提取用戶時,它總是使用基本的User類。 我真正想要的是能夠獲取與調用該方法的應用相同類型的User。

例如,如果用戶在SomeController

class App1::SomeController < ApplicationController; end

我希望application_controller中的方法拉出App1以便它實例化一個App1::User而不只是一個User

這可能嗎?

我不是在尋找涉及兩個user_from_session方法的解決方案,每個應用程序一個。 我知道如何實施。 我更想知道在Ruby中是否可以進行此類操作。

盡管我會提醒您找到一種更好,更簡單的方法來實現此目的,但是您可以按照以下方式進行操作:

def user_from_session
  # App1::Whatever::FooController -> App1::Whatever
  module_name = self.class.name.split('::')[0..-2].join('::')
  # App1::Whatever -> App1::Whatever::User
  user_class = "#{module_name}::User".constantize
  # App1::Whatever::User.find_by_id(...)
  user_class.find_by_id(session[:user_id])
end

暫無
暫無

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

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