Rails 3カスタムバリデーターはどこに保存する必要がありますか?


93

docs / websitesがカスタムバリデーターをプロジェクトの/libまたは/lib/validatorsディレクトリに配置する必要があることを示しているのを見てきました。私は(別の投稿への回答を読むことにより)でのみ機能しているようだとわかりましたconfig/initializers。誰かが知っているか、またはカスタム検証がどこにあるべきかを示す公式ドキュメントへのポインタを持っていますか?


回答:


220

カスタムバリデーターを配置するapp/validatorsと、config/application.rbファイルを変更する必要なく自動的にロードされます。


これに追加する必要のあるgem / configがあるかどうかはわかりませんが、rails 3.2.8ではこれは機能しません。具体的には、単にバリデーターをapp / validators / ???。rbにドロップするだけでは機能しません。
Doug

17
ダグは、バリデータクラスの名前が、強調されたバリデータファイルと同じように名前を付けるために試してみてください。MyCoolValidatorアプリに行く/バリ/ my_cool_validator.rb
equivalent8

14
@Dougはサーバーを再起動する必要があります。自動ロードパスは初期化時に展開されるため、そうするまで新しいサブフォルダーは取得されません。
Timo

私はまた、Monkeypatch ActiveModel :: Validations :: HelperMethodsを使用して、新しい検証のヘルパーを追加します(たとえば、AddressValidatorのvalidates_address)。monkeypatchとValidatorの両方をapp / validators / address_validator.rbに含めると、Monkeypatchではなく、AddressValidatorオブジェクトのみが読み込まれます。あなたたちは同じ行動を経験していますか?
jshkol 2012

1
spring stopRails 5.2では私にとって必要でしたが、それ以外の場合は採用されませんでした。
Jack Kinsella

15

これを/config/application.rbファイルに追加した場合:

config.autoload_paths += %W["#{config.root}/lib/validators/"]

次に、Railsは起動時にバリデーターを自動的にロードします(/ config / initializers /と同様)。


9
良いアイデアですが、コードにはいくつかのクリーンアップが必要です: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorsはるかにきれいなようです。ただし、モデルの前にそれらをロードする必要がある場合があるため、おそらくイニシャライザからロードする必要があります。


4

ここだ公式ドキュメントのカスタム検証については。AFAIKは、適切なモデルでそれらを保持することをお勧めします。


5
それらが複数のモデルに適用できる場合を除いて、その場合は、それらを別の場所に置いて乾燥状態を維持する必要があります。
Andrew Marshall

それはおそらく彼らがそうであるものです。そうでなければ、それらのために別個のクラスを作成することにはほとんど意味がありません。
Jakub Hampl、2011年

7
@Jakubはい、あります。単一の責任の原則
mattwynne

2
公式ドキュメントへのリンクが壊れています。これがそのドキュメントの現在の場所です。guides.rubyonrails.org/…– Stijnster '23
09/15
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.