按名称动态获取Ruby类常量
我有一个类API,它从第三方API中提取对象,并将它们构建到属于按名称动态获取Ruby类常量,ruby,oop,Ruby,Oop,我有一个类API,它从第三方API中提取对象,并将它们构建到属于APIObject类型的子类的对象中APIObject子类与我从中提取的API中的对象名称匹配: User < APIObject Account < APIObject 我希望将此调用转换为如下API调用的方法: API::User::findById id 我想使用self.class.name访问APIObject子类(User)的名称,并使用该名称调用常量(API::User),但我知道API::self.c
APIObject
类型的子类的对象中APIObject
子类与我从中提取的API中的对象名称匹配:
User < APIObject
Account < APIObject
我希望将此调用转换为如下API调用的方法:
API::User::findById id
我想使用
self.class.name
访问APIObject子类(User
)的名称,并使用该名称调用常量(API::User
),但我知道API::self.class.name
不起作用。我可以为每个子类一次又一次地重写这个方法,但似乎不用这样做就可以实现。建议?我想你在找。也许是这样的:
def self.find(id)
API.const_get(self.name).find_by_id(id)
end
(注意,您只需要
self.name
,因为它已经在类的上下文中,self.class.name
将只是class
)。但是如果我从APIObject中定义该方法由子类继承,我将需要self.class.name。对抱歉…对Rails还是有点生疏。@kid_没有。如果你想像User.find
那样调用它,那么它是User
上的一个方法,因此self
将是你感兴趣的类(即User
)。如果您想在User
(例如a_User.find
)的实例上调用它,您需要self.class
@kid\u注意,在Ruby中,当您从类继承时,类方法是继承的,可以在子类本身上使用,也可以在子类的实例上使用。const_get很棒@matt您尝试了什么?到目前为止,你所做的只是给我们一份需求清单。这不是这个网站的目的。我们帮助您编写您试图编写的代码,而不是为您编写。
def self.find(id)
API.const_get(self.name).find_by_id(id)
end