gpt4 book ai didi

ruby-on-rails - autoload_paths 不知道 namespace ?

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

app/services 中,我有一些类,如 Notification::FinderNotification::Builder

它们被放置为 app/services/notification/builder.rbapp/services/notification/finder.rb

还有 Notification 类作为模型,位于 app/models/notification.rb

autoload_path 配置为 config.autoload_paths += %W(#{config.root}/app/services)

当我尝试加载 Finder 时,它起作用了:

Loading development environment (Rails 3.2.9)
[1] pry(main)> Notification::Finder
=> Notification::Finder

但是当我尝试使用 Builder 时,我遇到了 rails 自动加载问题:

Loading development environment (Rails 3.2.9)
[1] pry(main)> Notification::Builder
=> ActiveRecord::Associations::Builder

当常量名称 (Builder) 已经被其他命名空间定义时,它只是忽略我使用的命名空间,取而代之的是 ActiveRecord::Associations::Builder

这是预期的行为还是 Rails 错误?

更详细地说,activesupport/dependencies.rb 中的const_missing 方法接收到一个const_name 'Builder'嵌套。检查 => 'nil'

奇怪的是,当我使用 constantize 时,它​​会按预期解析:

Loading development environment (Rails 3.2.9)
[1] pry(main)> 'Notification::Builder'.constantize
=> Notification::Builder

(github 上的 Rails 问题:https://github.com/rails/rails/issues/8726)

最佳答案

ActiveRecord::Associations::Builder 是 Rails 中的一个模块。如果你有一个 Notification::Builder,你可以询问它的类:

>> Notification::Builder
=> ActiveRecord::Associations::Builder
>> Notification::Builder.class
=> Module
>> Notification::Builder.ancestors
=> [ActiveRecord::Associations::Builder]

Is this expected behavior?

OK, so... what choices do you have?

  • 您可以使用与 Builder 不同的术语。喜欢工厂。或 Notification::NotificationBuilder

更多信息:
* http://www.rubydoc.info/docs/rails/3.1.1/ActiveRecord/Associations/Builder/Association
* http://apidock.com/rails/ActiveRecord/Associations/Builder

关于ruby-on-rails - autoload_paths 不知道 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14143318/

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