8

Rails アプリケーションのモデル、ビュー、およびコントローラー全体で使用できる汎用の文字列操作クラスを作成したいと考えています。

現在、モジュールを lib ディレクトリに配置しようとしていますが、Rails コンソールで関数にアクセスしてテストしようとしています。同様の質問から多くのテクニックを試しましたが、うまくいきません。

私の lib/filenames.rb ファイルで:

module Filenames

  def sanitize_filename(filename)
    # Replace any non-letter or non-number character with a space
    filename.gsub!(/[^A-Za-z0-9]+/, ' ')

    #remove spaces from beginning and end
    filename.strip!

    #replaces spaces with hyphens
    filename.gsub!(/\ +/, '-')
  end

  module_function :sanitize_filename

end

sanitize_filename("some string") を呼び出そうとすると、no method エラーが発生します。Filenames.sanitize_filename("some string") を呼び出そうとすると、初期化されていない定数エラーが発生します。「/lib/filenames」をインクルードしようとすると、ロード エラーが発生します。

  1. これは、どこからでもアクセスできるメソッドを作成する最も一般的な方法ですか? 代わりにクラスを作成する必要がありますか?

  2. どうすれば機能しますか?:)

ありがとう!

4

1 に答える 1

13

本当に素晴らしい答えについては、質問へのコメントで参照されている Yehuda Katz の答えを見てください (実際に見てください)。

この場合の簡単な答えは、おそらくファイルをロードしていないということです。RyanWilcox から提供されたリンクを参照してください。これは、ファイルに構文エラーを追加することで確認できます。アプリ (サーバーまたはコンソール) の起動時に構文エラーが発生しない場合は、ファイルが読み込まれていないことがわかります。

ロードしていると思われる場合は、ロードに使用しているコードを投稿してください。繰り返しますが、詳細については RyanWilcox から提供されたリンクを参照してください。これには、環境構成ファイルの 1 つに入る次のコードが含まれます。

# Autoload lib/ folder including all subdirectories
config.autoload_paths += Dir["#{config.root}/lib/**/"]

しかし、本当に、イェフダの答えを読んでください。

于 2013-08-23T03:09:25.257 に答える