Reputation:
I'm new to rails and can't figure out this issue...
I have a controller
Admin::Blog::EntriesController
defined in app/controllers/admin/blog/entries_controller.rb
And I have a model called
Blog::Entry
defined in app/model/blog/entry.rb
When I try to access my model from the controller, I get a "uninitialized constant Admin::Blog::EntriesController::Blog"
from this line:
@blog_entries = Blog::Entry.find(:all)
Clearly it is not finding the namespace correctly which is odd because according to what I have read, I have placed my model in the correct folder with the correct syntax.
Any ideas on how I can fix this?
Thanks
Upvotes: 12
Views: 8049
Reputation: 74
It is now 2011 and we are in Rails 3.1 territory, but this issue still arises. I just ran into it with a namespaced controller referencing a non-namespaced model, but only when there were no rows for that model in the database!
Prefixing the model name with :: fixes the problem.
Upvotes: 3
Reputation: 36
Yeah, from looking at the code form_for uses polymorphic_path under the hood.
Upvotes: 0
Reputation: 32748
You can achieve a custom table name by using
set_table_name('foo')
at the top of your model.
As for multiple namespaces, you might be able to get away with using
polymorphic_path(@the_object)
to generate your urls as it does more basic inference (in my experience at least, maybe form_for uses it under the hood).
Upvotes: 1
Reputation: 5846
Try:
@blog_entries = ::Blog::Entry.find(:all)
It's currently looking for the wrong class. Using ::
before Blog
will force it to look from the top level.
Upvotes: 36