我有一个类API,它从第三方API中提取对象,并将它们构建为类型为APIObject
的子类的对象。 APIObject
个子类匹配我从中提取的API中的对象名称:
User < APIObject
Account < APIObject
我想在APIObject中定义一个类方法,允许我使用标准的Rails访问器来提取对象:
user = User.find id
我希望将此调用转换为API调用的方法如下:
API::User::findById id
我想使用User
访问APIObject子类的名称(self.class.name
)并使用它来调用常量(API::User
),但我知道API::self.class.name
不行。我可以一遍又一遍地为每个子类重写这个方法,但看起来这应该是可能的,不用这样做。建议?
答案 0 :(得分:29)
我认为你正在寻找const_get
。也许是这样的事情:
def self.find(id)
API.const_get(self.name).find_by_id(id)
end
(请注意,您只需要self.name
,因为这已经在课程的上下文中,而self.class.name
只是Class
)。