【问题标题】:Unable to autoload constant Auction, expected /app/models/configuration/auction.rb to define it无法自动加载常量 Auction,需要 /app/models/configuration/auction.rb 来定义它
【发布时间】:2019-04-10 19:23:02
【问题描述】:

所以我有两个班级app/models/auction.rbapp/models/configuration/auction.rb

#app/models/auction.rb
class Auction
end

#app/models/configuration/auction.rb
class Configuration::Auction
  attr_accessor :auction_preferences
end

我得到了错误

无法自动加载常量拍卖,预计 /app/models/configuration/auction.rb 来定义它

当下面一行被执行时

(Configuration::Auction.new(user).enable_auction? ? Auction.get_details(user) : "NA")

【问题讨论】:

  • 可能是因为有同名?尝试更改任何两个模型的名称。

标签: ruby-on-rails


【解决方案1】:

拥有两个具有相同核心名称的对象有时会让自动加载器感到头疼,因为它无法完全确定您想要的命名空间。

您可以尝试更明确地使用第二个 Auction 对象,并指定 ::Auction 以表明您的意思是非命名空间类。

但我也会考虑配置对象的命名方案。如果不了解您的对象模型的更多信息,很难确定,但AuctionConfiguration 可能是您的配置对象更好的模型名称。

【讨论】:

    【解决方案2】:

    LoadError error 的一个可能根本原因是,从 Rails 5.2.0 开始,自动加载发生了变化,需要(至少)定义子模块(命名空间)(作为常量)。

    在原始帖子的示例中,module Configuration 应在 app/models/configuration.rb 文件中定义。

    请参阅此related SO answer 了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      相关资源
      最近更新 更多