0

アプリケーションを実行しようとすると、次のエラーが発生します。

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フォルダーに配置されたものがすべて含まれていることを保証する方法の説明があります(私のコードに続きます)。エラーメッセージが表示されるのはなぜですか?

4

1 に答える 1

1

Railsのマジックローディングが機能するには、クラス名のみに基づいてクラス/モジュールが定義されているファイルを見つけることができる必要があります。

これは、Railsの命名規則を守り、Railsが期待する場所に物事を置くことを意味します。UserSerialはuser_serial.rbで定義する必要があります。User_serialをクラス名として機能させることはできるかもしれませんが、railsはmy_tools.rbでそのクラスを探すことはありません。

于 2012-05-23T20:07:02.800 に答える