Rails 3 커스텀 유효성 검사기는 어디에 저장해야합니까?


93

문서 / 웹 사이트에서 사용자 지정 유효성 검사기가 프로젝트 의 /lib또는 /lib/validators디렉터리에 있어야 함을 보여줍니다 . 나는 (다른 게시물에 대한 답변을 읽음으로써) 그들이 config/initializers. 누구든지 사용자 지정 유효성 검사기가 있어야하는 위치를 보여주는 공식 문서를 알고 있거나 포인터가 있습니까?


답변:


220

사용자 정의 유효성 검사기를 배치하면 파일 app/validators을 변경할 필요없이 자동으로로드 config/application.rb됩니다.


이를 위해 추가해야 할 gem / config가 있는지 모르겠지만 레일 3.2.8에서는 작동하지 않습니다. 특히, 단순히 유효성 검사기를 app / validators / ???. rb에 놓는 것은 작동하지 않습니다.
Doug

17
Doug는 유효성 검사기 클래스의 이름이 지정되었지만 밑줄이있는 방식으로 유효성 검사기 파일의 이름을 지정하려고합니다. MyCoolValidator는 app / validators / my_cool_validator.rb로 이동합니다.
equivalent8

14
@Doug 서버를 다시 시작해야합니다. 자동로드 경로는 초기화시 확장되므로 그렇게 할 때까지 새 하위 폴더가 선택되지 않습니다.
Timo

또한 monkeypatch ActiveModel :: Validations :: HelperMethods를 사용하여 새 유효성 검사를위한 도우미를 추가합니다 (예 : AddressValidator의 validates_address). app / validators / address_validator.rb에 monkeypatch와 Validator를 모두 포함 시키면 Monkeypatch가 아닌 AddressValidator 객체 만로드됩니다. 너희들도 같은 행동을 경험하고 있습니까?
jshkol

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.