rails:使用另一个模块中定义的类

时间:2012-05-23 19:52:21

标签: ruby-on-rails class methods scope

当我尝试运行我的应用程序时,我收到以下错误:

uninitialized constant RegistrationsController::User_serial

在我的config / application.rb中,我有:

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

在我的registrations_controller.rb中,我有以下内容:

class RegistrationsController < Devise::RegistrationsController
  ........

def create
    @user = User.new(params[:user])

    user_serial_local = User_serial.new #initialize class defined in lib/my_tools.rb
    date_time_local = Date_formatter.new
    ......

在lib / my_tools.rb中,我定义了一些类:

class User_serial
  def self.calculate(first,last)
    first_3 = first[0..2]
    last_4 = last[0..3]
    time = Time.now.to_i
    return first_3 + last_4 + time.to_s
  end 
end

class Date_formatter
  def self.datetime
    return Time.now.strftime("%Y-%m-%d %H:%M:%S")
  end
end

有许多引用覆盖类,以及如何确保放置在lib文件夹中的任何内容的说明(在我的代码中都有)。为什么我收到错误消息?

1 个答案:

答案 0 :(得分:1)

要使rails的魔术加载工作,它需要能够根据类名找到定义类/模块的文件。

这反过来意味着坚持rails的命名约定并把东西放在rails所期望的位置:UserSerial应该在user_serial.rb中定义。您可能能够将User_serial作为类名称工作,但rails将永远不会在my_tools.rb中查找该类。