在命名空间中的Ruby on Rails模型在控制器中找不到
我是rails的新手,无法弄清楚这个问题……
我有一个控制器
Admin::Blog::EntriesController
在app / controllers / admin / blog / entries_controller.rb中定义
我有一个名为的模型
Blog::Entry
在app / model / blog / entry.rb中定义
当我尝试从控制器访问我的模型时,我从这一行得到一个"uninitialized constant Admin::Blog::EntriesController::Blog"
:
@blog_entries = Blog::Entry.find(:all)
显然,它没有正确找到名称空间,这是奇怪的,因为根据我所读到的,我已经使用正确的语法将我的模型放在正确的文件夹中。
关于如何解决这个问题的任何想法?
谢谢
尝试:
@blog_entries = ::Blog::Entry.find(:all)
它目前正在寻找错误的课程。 在Blog
之前使用::
将强制它从顶层看。
现在是2011年,我们处于Rails 3.1领域,但这个问题仍然存在。 我刚刚使用引用非命名空间模型的命名空间控制器遇到它, 但只有当数据库中没有该模型的行时!
用::前缀模型名称修复问题。
您可以使用实现自定义表名
set_table_name('foo')
在你的模型的顶部。
对于多个名称空间,您可能可以逃脱使用
polymorphic_path(@the_object)
生成你的url,因为它做了更基本的推理(至少在我的经验中,也许form_for在引擎盖下使用它)。
是的,从查看代码form_for开始使用polymorphic_path。