这个标题并没有真正解释所有内容,所以这里有。我有两个共享一些功能的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
类。我真正想要的是能够获取与调用该方法的应用程序类型相同的用户。
例如,如果用户在SomeController
:
class App1::SomeController < ApplicationController; end
我希望application_controller中的方法提取App1
,以便它实例化App1::User
而不仅仅是User
这可能吗?
我不是在寻找一种涉及两种user_from_session
方法的解决方案,每种方法都有一种方法。我知道如何实现它。我更感兴趣的是知道Ruby中是否可以使用这种类型的东西。
答案 0 :(得分:0)
虽然我提醒你要找到一个更好,更少hacky的方法,但是你可以这样做:
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