Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按名称动态获取Ruby类常量_Ruby_Oop - Fatal编程技术网

按名称动态获取Ruby类常量

按名称动态获取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

我有一个类API,它从第三方API中提取对象,并将它们构建到属于
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