路由错误:Rails 3中未初始化的常量

aku*_*001 9 ruby ruby-on-rails

我有一个包含辅助类的文件,如下所示:

应用程序/类/ myfile.rb

Module mymodule
  class myclass
    # blah blah
  end
end
Run Code Online (Sandbox Code Playgroud)

我想在控制器中使用这个类,所以我写了这样的东西:

require 'myfile'

class MyController < ApplicationController

  include mymodule  

  def index
    mymodule::myclass.new
  end

end
Run Code Online (Sandbox Code Playgroud)

控制器的路由定义如下:

  match 'mycontroller', :to => 'mycontroller#index'
Run Code Online (Sandbox Code Playgroud)

现在我面对的是奇怪的行为.它在服务器启动后的第一次运行时完美运行.但是当我刷新页面或再次点击URL时,我收到以下错误.

Routing Error

uninitialized constant MyController::mymodule
Run Code Online (Sandbox Code Playgroud)

我无法从错误中找出任何东西,也不能理解为什么它从第二次打击起不起作用.发生了什么?

Luk*_*kas 8

一般来说,Rails喜欢看到包含以下内容的文件:

module MyModule
Run Code Online (Sandbox Code Playgroud)

命名 my_module.rb

模块通常是大写的

此外,它认为MyModule是在MyController类的范围内,但它不是.你可以试试

include ::MyModule 
Run Code Online (Sandbox Code Playgroud)

从顶级范围访问它.

我也不知道你的加载路径是否包含你的类目录,因此它可能不会首先自动加载myfile.rb文件.


aku*_*001 2

我更改了 require 'myfile' 来加载 'myfile.rb',它现在工作正常。我不知道我是否解决了这个问题。我不知道发生了什么事。有人可以启发我吗?