Ruby on rails 引用常量作为字符串
在Rails 5的Ruby on rails 引用常量作为字符串,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,在Rails 5的/lib目录中,我有一个类,它位于Ruby模块的名称空间中 我可以使用以下代码引用该类: OrderSyncers::Marketplaces::Walmart.new Object.cont_get("Test").new 在Rails模型中,我有一个marketplace列,其中包含一个市场名称,如“Walmart”。我试图引用Walmart类。注意:Walmart类是OrderSyncers::OrderSync.new的子类 在ruby中,我可以使用以下代码成功调用
/lib
目录中,我有一个类,它位于Ruby模块的名称空间中
我可以使用以下代码引用该类:
OrderSyncers::Marketplaces::Walmart.new
Object.cont_get("Test").new
在Rails模型中,我有一个marketplace列,其中包含一个市场名称,如“Walmart”。我试图引用Walmart
类。注意:Walmart
类是OrderSyncers::OrderSync.new
的子类
在ruby中,我可以使用以下代码成功调用类:
OrderSyncers::Marketplaces::Walmart.new
Object.cont_get("Test").new
但是,当我尝试在名称空间引用中引用该类名时,我得到了一个错误
OrderSyncers::Marketplaces::Object.const_get("Walmart").new
错误:
NameError (uninitialized constant OrderSyncers::Marketplaces::Object)
我想使用
Object.const_get(“string”)
的原因是,我可以使用数据库中的字段初始化OrderSyncers::OrderSync的正确子类。为什么要添加::Object
?你不需要它
OrderSyncers::Marketplaces.const_get("Walmart").new
你说的是Walmart
类,但使用的是Object
,这在该模块中可能不存在。这是如何工作的?你能解释一下吗?这看起来像是对Marketplaces
的函数调用,但这毫无意义。但它确实有效。Thanks@CannonMoyer:为什么在对象上调用const\u get
没有意义?这里也发生了同样的事情。我想让我困惑的是,Marketplaces.const_get
看起来只不过是一个类方法,所以语法相当混乱。我不太明白Marketplaces.const_get(“沃尔玛”)
如何返回Marketplaces::Walmart
。在我看来,它似乎会返回::Walmart
,但这也毫无意义。@CannonMoyer:因为Walmart是一个常量,它属于市场(嵌套在其中)。“Marketplaces.const_get看起来只不过是一个类方法”——这正是它的本质。嗯,实际上它是一个,所以模块有这个方法也就不足为奇了。@CannonMoyer:别担心,总有一天它会点击的。同时,也许可以买一本“编程ruby”