2011-01-11 69 views
1

該標題並沒有真正解釋所有的事情。我有兩個共享一些功能的Rails引擎(即用戶模型和認證)。我有一個基User類,然後其他兩個用戶類從該基類繼承爲每個應用,像這樣:如何獲取Ruby中的當前實例模塊

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類。我真正想要的是能夠獲取與調用該方法的應用程序類型相同的用戶。

舉例來說,如果用戶是在SomeController

class App1::SomeController < ApplicationController; end 

我想在application_controller方法拔出App1使其實例化一個App1::User,而不僅僅是一個User

這是可能?

我不是在尋找一種解決方案,涉及兩個user_from_session方法,每個應用程序一個。我知道如何實現這一點。我更感興趣知道這種類型的事情在Ruby中是否可行。

+0

你在哪裏調用從`user_from_session`方法? – 2011-01-11 07:40:52

+0

啊對不起,它是從application_controller中的before_filter調用的......它實際上是從我的`current_user`方法裏面調用的 – brad 2011-01-11 12:27:29

回答

0

雖然我想提醒你找到一個更好的,少哈克的方式做到這一點,這裏是你將如何做到這一點:

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 
相關問題