【问题标题】:Rails console: Unable to autoload constantRails 控制台:无法自动加载常量
【发布时间】:2014-05-11 12:21:25
【问题描述】:

我有一个 Customer_ratings 模型,允许用户互相留下反馈。 Web 应用程序运行正常,并收集、存储和显示反馈。

本想进去通过rails控制台删除一些反馈,但是当我输入Customer_rating.all时,出现如下错误:

LoadError: Unable to autoload constant Customer_rating, expected /Users/myapps/app/models/customer_rating.rb to define it

同样,如果我输入 Customer_rating[0],我会得到:

RuntimeError: Circular dependency detected while autoloading constant Customer_rating

我在通过控制台访问其他表时没有这个问题。

什么可能导致问题,为什么这个错误不会阻止 Customer_ratings 通过网络应用程序正常工作?

【问题讨论】:

标签: ruby-on-rails-4 associations autoload rails-console


【解决方案1】:

这似乎是一个混乱的命名约定。

根据Rails 命名约定,文件名 应该在snake_case 中,类名 应该在CamelCase 中。在您的方案中,文件名应为customer_rating.rb,类名应为CustomerRating

进行这些更改后,使用CustomerRating.all(因为更新后的类名是CustomerRating)来获取所有客户评级。 不要使用Customer_rating.all

【讨论】:

  • CustomerRating.all vs Cutomer_rating.all 是问题所在。谢谢!
  • 我在不同情况下收到了类似的错误消息。我的错误是,我在类名中输入了错字,并且 rails 无法在文件中找到预期的类。现已修复。
【解决方案2】:

我还想添加一个我发现的这个问题的场景以供将来参考。

我正在运行 Rails 4.0 并且遇到了同样的问题,但发生的情况是我在 student.rb 中有一个名为 Student 的模型,该模型包含在一个名为 Student 的文件夹中。起初我没有意识到,但文件夹名称是问题所在。将文件夹名称更改为模型名称以外的名称即可解决问题。

【讨论】:

  • 谢谢你,好心的先生!
【解决方案3】:

如果命名约定没有关闭,就像在这个问题中一样,如果您同时发出大量请求,则在初始首次加载时可能会出现问题。我在嵌套控制器 Api::LocationsController 中遇到过这种情况。

我通过在开发环境中启用 eager_load 解决了这个问题:

Rails.application.configure do
  ...
  # Enabled this to avoid crash unable to autoload controller 
  # Error happens when you start and stop server on initial requests
  # solution found via https://github.com/rails/rails/issues/32082#issuecomment-367715194
  config.eager_load = true

我基于这个脱离轨道的问题 cmets:https://github.com/rails/rails/issues/32082#issuecomment-367715194

【讨论】:

    【解决方案4】:

    你只需要修改Module的名字

    例如,如果链接是http://sairam.esy.es/users/customer_rating,那么 你的控制器应该是

    module Users
      class RatingController
        # ...
    
        def customer_rating
          # ...
        end
    
        # ...
      end
    end
    

    【讨论】:

    • 这不是 Ruby 语法
    猜你喜欢
    • 2016-09-03
    • 2020-08-27
    • 2019-03-14
    • 2019-08-19
    • 2016-04-18
    • 2014-10-24
    • 2020-03-31
    • 2018-12-05
    • 2021-02-09
    相关资源
    最近更新 更多