Ruby 为什么Module.const_get在作用域类的情况下抛出NameError异常?

Ruby 为什么Module.const_get在作用域类的情况下抛出NameError异常?,ruby,Ruby,我在Rails应用程序中设置了以下模型: # app/models/event_list/peak.rb class EventList::Peak < AR # ... end 因此,我启动Rails控制台并尝试通过以下操作手动获取所需的正确符号: Module.const_get(EventList::Peak.to_s.to_sym) 但我也犯了同样的错误。当我在控制台中简单地键入EventList::Peak时,我得到了正确的类对象 我在这里遗漏了什么吗?模块::const

我在Rails应用程序中设置了以下模型:

# app/models/event_list/peak.rb
class EventList::Peak < AR
  # ...
end
因此,我启动Rails控制台并尝试通过以下操作手动获取所需的正确符号:

Module.const_get(EventList::Peak.to_s.to_sym)
但我也犯了同样的错误。当我在控制台中简单地键入
EventList::Peak
时,我得到了正确的类对象


我在这里遗漏了什么吗?

模块::const\u get
不支持任意深度;它只获取调用模块的子级。因此,在您的情况下,
EventList.const\u get(Peak.to\u s.to\u sym)
应该可以工作

您可以使用
ActiveSupport
qualified\u const\u get
来执行您的请求,例如:

require 'active_support/core_ext'
Module.qualified_const_get(EventList::Peak.to_s.to_sym)
如果您不想使用
ActiveSupport
,还可以执行以下操作:

Module.const_get(EventList.to_s.to_sym).const_get(Peak.to_s.to_sym). 

使用
inject
来支持任意深度并复制
qualified\u const\u get
功能,也可以很容易地创建一个包装器。太好了,谢谢!尽管我需要提到,
qualified\u const\u get
似乎只处理字符串,而不是符号。
Module.const_get(EventList.to_s.to_sym).const_get(Peak.to_s.to_sym).