2010-07-04 122 views
9

每次提到我得到一个警告顶级恒定的ApplicationController铁轨对我的要求是什么?有什么麻烦?Rails3中:警告:

相同的情况与其他控制器

class Agency::ClientsController < Agency::ApplicationController 
    ... 
end 

而且没有警告,没有错误...

回答

5

ApplicationController是Rails的,当你创建一个新的项目,所有为您生成的超类控制器的名称你的其他控制器类继承自。可能有冲突的地方,因为你已经使用了相同的名字,即使你把它放在一个命名空间中。

尝试给你的Agency::ApplicationController一个不同的名字。

+0

但是,为什么没有与出售:: ClientsController没有烦恼? – petRUShka 2010-07-07 11:35:11

+1

因为ClientsController对Rails没有特殊的含义。 – 2010-07-07 12:32:34

+0

我有一个功能Admin :: ApplicationController,它不会产生问题。所以重命名不应该被要求。调用堆栈中的其他地方可能存在歧义,Ruby对此抱怨。 – 2012-01-04 15:54:37

2

在设置SporkWatchr后,我有类似的问题。在这个过程中,我关闭了类缓存(config_cache_classes => falseconfig/environments/test.rb),以便在spork环境中根据需要重新加载更改。转向类缓存back on使警告消失。

7

我在我的Admin名称空间控制器中运行SporkWatchr时遇到类似问题。所以我加入以下代码spec_helper.rb固定到这个each_run块:

Dir[File.expand_path("app/controllers/admin/*.rb")].each do |file| 
    require file 
end 

所有学分去guy from this thread

+1

谢谢,这已经解决了这个问题。 – 2012-01-10 10:22:41

+1

感谢这工作得很好,为简洁起见,我修改了一下:Dir [Rails.root.join(“app/controllers/admin/* .rb”)]。each {| f |需要f} – 2012-02-02 09:36:06

+0

几小时后我的头撞了..这解决了我的问题..好,我注意到警告和好,我发现这个答案..非常感谢。 – whizcreed 2012-07-18 13:15:40

12

我意识到这个问题是快两岁了,但我最近通过another计算器偶然发现了这个希望分享一些见解。

基本上,如果您的命名空间Agency碰巧是class而不是module,您会看到该警告。在上面粘贴的stackoverflow后,他们有一个模型(classAdmin和他们的命名空间也是Admin

This提供了一个更好的解释发生了什么。

因此请检查您的代码是否未在某个地方定义Agency类。祝你好运。

2

对我而言,这是Devise的问题。我有一个设计模型管理员和命名空间路由管理员。将名称空间路由更改为管理员解决了问题。

0

解决方案对我来说是加入这一行:

# spec/rails_helper.rb 
Dir[File.expand_path("app/controllers/admin/*.rb")].each { |file| require file }