我有一个类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
无法正常工作。我可以为每个子类一遍又一遍地重写此方法,但似乎不这样做就应该可以实现。有什么建议吗? 最佳答案
我认为您正在寻找 const_get
。也许像这样:
def self.find(id)
API.const_get(self.name).find_by_id(id)
end
(请注意,您只需要
self.name
,因为这已经在类的上下文中了,并且self.class.name
只是Class
)。关于ruby - 通过名称动态获取Ruby类常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18752394/