0

Ruby on Rails 3.2.9 を使用しており、ディレクトリのサブディレクトリにあるカスタム バリデータを使用してフレームワークを拡張したいと考えていlib/ます。私は以下を実装しました:

# lib/extension/rails/custom_validator.rb
module Extension
  module Rails
    class CustomValidator < ActiveModel::EachValidator
      # ...
    end
  end
end

サーバーを再起動すると、Unknown validator: 'CustomValidator'エラーが発生します。どうすれば問題を解決できますか?


注 I :config/application.rb私が述べたファイルでconfig.autoload_paths += %W(#{config.root}/lib)

注 IIcustom_validator.rb : ファイルをディレクトリの「直下」に置きlib/(つまり、ファイルを「サブディレクタ」せずに)、次のコードを使用すると、動作します。

# lib/custom_validator.rb
class CustomValidator < ActiveModel::EachValidator
  # ...
end
4

1 に答える 1

0

「extension.rb」という名前の lib フォルダーに、次の内容のファイルを作成してみてください。

$:.unshift File.expand_path(File.dirname(__FILE__))

module Extension
    module Rails
        autoload :CustomValidator, "extension/rails/custom_validator"
    end
end

この手法の使用方法については、http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.htmlおよびhttps://github.com/macournoyer/thin/blob/c8f4627bf046680abb85665f28ab926e36c931db/lib/thin.rbをご覧ください。 .

前のコードは、次のようにバリデータを記述したことを前提としています

# lib/extension/rails/custom_validator.rb
module Extension
  module Rails
    class CustomValidator < ActiveModel::EachValidator
      # ...
    end
  end
end

そして、次のようにモデルに含めたこと

class MyModel
  validates_with Extension::Rails::CustomValidator
end

別のオプションは、次のようにバリデータを定義することです

# lib/extension/rails/custom_validator.rb

class CustomValidator < ActiveModel::EachValidator
  # ...
end

次に、そのディレクトリをアプリケーションのロードパスに追加します

# config/application.rb
config.autoload_paths += %W(#{config.root}/lib/extension/rails)

モデルでは、以下を使用して検証します

class MyModel
  validates :my_property, :presence => true, :custom => true
end
于 2012-12-15T16:26:37.183 に答える