gpt4 book ai didi

ruby-on-rails - 为什么以这种方式构建我的代码会导致顶层持续警告,我该如何解决?

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:29 25 4
gpt4 key购买 nike

我的应用程序代码在 Rails 3.2 中的结构如下所示。如果我进入 Rails 控制台并输入 Foo::Bar::FooBar,它将返回此警告:

warning: toplevel constant FooBar referenced by Foo::Bar::FooBar

它们所在的应用程序代码和文件:

# app/models/foo/bar/foo_bar.rb
module Foo
class Bar
class FooBar
end
end
end

# app/models/foo/bar.rb
module Foo
class Bar
end
end

# app/models/foo_bar.rb
class FooBar
end

我的自动加载路径没有更改为 Rails 默认值。

我能够解决该问题的一种方法是将以下代码添加到 Foo::Bar::FooBar。但是,感觉很脏,我想知道是否有配置选项或我做错的其他事情可以解决问题。

# app/models/foo/bar/foo_bar.rb
module Foo
# This line of code removes the warning and makes class methods execute
# on the Foo::Bar::FooBar class instead of the FooBar class.
class Bar; end

class Bar
class FooBar
end
end
end

最佳答案

基本问题是您在重叠的范围内为不同的类重复使用相同的名称。您也许可以做一些聪明的事情让 Ruby 以您想要的方式解析常量名称,但这种“解决方案”从根本上来说是脆弱的。 (如果新版本的 Ruby 对常量的查找方式做了微小的更改,或者您转移到另一个 Ruby 实现怎么办?)

为什么不直接在模块中为顶级 FooBar 模型类命名空间? (您必须将文件移动到与模块同名的子目录中。)

关于ruby-on-rails - 为什么以这种方式构建我的代码会导致顶层持续警告,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13386800/

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