[英]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.