warning: toplevel constant SomeController referenced by Admin::SomeController

2,141 views
Skip to first unread message

dblock

unread,
May 25, 2011, 1:26:57 PM5/25/11
to Ruby on Rails: Core
This issue has been discussed before (http://www.ruby-forum.com/topic/
125392) and after spending a while debugging through this, I still
don't have a solution. Lets try again?

I have two controllers, SomeController and Admin::SomeController. When
SomeController is loaded first (which happens under spork, found out
by editing ActiveSupport::AbstractController) I get warning: toplevel
constant SomeController referenced by Admin::SomeController and the
second controller is not loaded. The first controller is polluting
something for the namespaced controller.

I have a rather large project where this happens, so I can't post it.
But I have a 100% repro, so I'd be happy to do some debugging.

Help?

Andrew White

unread,
May 25, 2011, 5:38:48 PM5/25/11
to rubyonra...@googlegroups.com

On 25 May 2011, at 18:26, dblock wrote:

> I have two controllers, SomeController and Admin::SomeController. When
> SomeController is loaded first (which happens under spork, found out
> by editing ActiveSupport::AbstractController) I get warning: toplevel
> constant SomeController referenced by Admin::SomeController and the
> second controller is not loaded. The first controller is polluting
> something for the namespaced controller.

Is Admin a class or a module? If it's a class it's due to the fact that const_missing searches for constants in ancestors which includes Object when Admin is a class. Since SomeController is defined already in Object it will return that constant along with the warning message. If Admin is a module then the ancestor list is just itself.

A couple of ways to workaround the problem, either make Admin a module if possible or nest the public-facing controllers under a different namespace, e.g. Admin::SomeController and Front::SomeController.


Andrew

Reply all
Reply to author
Forward
0 new messages