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