我有一个类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/

10-08 23:13