gpt4 book ai didi

ruby-on-rails - 类名不在模块中定义,除非它在代码中使用

转载 作者:数据小太阳 更新时间:2023-10-29 08:28:48 25 4
gpt4 key购买 nike

我在模块中创建了一些类,f.i.请求 (app/models/api/request.rb)

class Api::Request
end

现在我想在控制台中检查类是否存在?

>> Api.const_defined?('Request')
=> false
>> Api::Request
=> Api::Request
>> Api.const_defined?('Request')
=> true

奇怪,除非我在代码中使用它,否则脚本看不到类名。如何解决这个问题?如果你能解释这个问题,那就太好了。项目使用Rails 2.3

最佳答案

这里的问题是 Rails 的自动加载机制。基本上它所做的是对您可以在每个对象上定义的方法 const_missing 作出 react 。调用此方法时,Rails 会查找可能包含缺失常量定义的文件并需要它。问题是

Api::Request

触发 const_missing 但是

Api.const_defined?('Request')

没有。

你可以写你自己的const_defined?像这样(代码将进入 rails 初始化程序):

def Module.autoload_const_defined?(name)
self.const_get name
ensure
return self.const_defined?(name)
end

首先尝试自动加载常量。

关于ruby-on-rails - 类名不在模块中定义,除非它在代码中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com