Rails控制台:无法自动加载常量

时间:2014-03-31 23:00:01

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

我有一个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通过网络应用程序正常工作?

4 个答案:

答案 0 :(得分:41)

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

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

进行这些更改后,使用CustomerRating.all(更新的类名称为CustomerRating)来获取所有客户评分。 请勿使用 Customer_rating.all

答案 1 :(得分:7)

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

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

答案 2 :(得分:0)

如果没有取消命名约定,例如在这个问题中,如果您同时发出很多请求,则在首次首次加载时可能会出现问题。我在嵌套控制器Api :: LocationsController上经历了这一点。

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

Rails.application.configure do
  ...
  # Enabled this to avoid crash unable to autload 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

我基于这个问题发表评论:https://github.com/rails/rails/issues/32082#issuecomment-367715194

答案 3 :(得分:-3)

您只需要修改模块的名称

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

module Users
  class RatingController
    # ...

    def customer_rating
      # ...
    end

    # ...
  end
end