代码之家  ›  专栏  ›  技术社区  ›  nlaq

在控制器中找不到命名空间内的Ruby on Rails模型

  •  11
  • nlaq  · 技术社区  · 17 年前

    我对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)
    

    很明显,它找不到正确的名称空间,这很奇怪,因为根据我读到的内容,我已经用正确的语法将模型放在了正确的文件夹中。

    我有什么办法可以解决这个问题吗?

    谢谢

    4 回复  |  直到 14 年前
        1
  •  29
  •   tomafro    17 年前

    尝试:

    @blog_entries = ::Blog::Entry.find(:all)
    

    它当前正在查找错误的类。使用 :: 之前 Blog 将强制它从顶层查看。

        2
  •  3
  •   turingtest37    14 年前

    现在是2011年,我们在Rails 3.1领域,但这个问题仍然存在。我刚遇到一个引用非名称空间模型的名称空间控制器, 但只有当数据库中没有该模型的行时!

    用::前缀模型名称可以修复问题。

        3
  •  1
  •   Cody Caughlan    17 年前

    您可以通过使用

    set_table_name('foo')
    

    在你的模型顶部。

    对于多个名称空间,您可能可以不必使用

    polymorphic_path(@the_object)
    

    生成你的网址,因为它做了更基本的推断(至少在我的经验中,可能形式为“在引擎盖下使用”)。

        4
  •  0
  •   Keith Pitt    16 年前

    是的,从代码形式来看,在引擎盖下使用多态路径。

    推荐文章