ตัวตรวจสอบความถูกต้องที่กำหนดเองของ Rails 3 ควรเก็บไว้ที่ไหน


94

ฉันเคยเห็นเอกสาร / เว็บไซต์แสดงให้เห็นว่าตัวตรวจสอบความถูกต้องที่กำหนดเองควรอยู่ใน/libหรือ/lib/validatorsไดเรกทอรีของโครงการ ฉันพบ (โดยการอ่านคำตอบของโพสต์อื่น) ว่าดูเหมือนจะใช้ได้config/initializersเท่านั้น ไม่มีใครรู้หรือมีตัวชี้ไปยังเอกสารอย่างเป็นทางการที่แสดงว่าเครื่องมือตรวจสอบที่กำหนดเองควรอยู่ที่ใด


คำตอบ:


221

หากคุณวางโปรแกรมตรวจสอบความapp/validatorsถูกต้องที่กำหนดเองไว้พวกเขาจะโหลดโดยอัตโนมัติโดยไม่จำเป็นต้องแก้ไขconfig/application.rbไฟล์ของคุณ


ฉันไม่รู้ว่ามี gem / config ที่คุณต้องเพิ่มสำหรับสิ่งนี้หรือไม่ แต่ภายใต้ราง 3.2.8 ใช้ไม่ได้ โดยเฉพาะอย่างยิ่งเพียงวางโปรแกรมตรวจสอบความถูกต้องของคุณลงในแอป / ตัวตรวจสอบความถูกต้อง / ???. rb ไม่ทำงาน
Doug

17
ดั๊กพยายามตั้งชื่อไฟล์ตัวตรวจสอบแบบเดียวกับที่ตั้งชื่อคลาส validator แต่เน้นย้ำ: MyCoolValidator ไปที่ app / validators / my_cool_validator.rb
equivalent8

14
@ คุณต้องรีสตาร์ทเซิร์ฟเวอร์ของคุณ เส้นทางโหลดอัตโนมัติจะขยายในการเริ่มต้นดังนั้นโฟลเดอร์ย่อยใหม่จะไม่ถูกดึงขึ้นมาจนกว่าคุณจะทำเช่นนั้น
Timo

ฉันต้องการที่จะ Monkeypatch ActiveModel :: Validations :: HelperMethods เพื่อเพิ่มตัวช่วยสำหรับการตรวจสอบความถูกต้องใหม่ของฉัน (เช่น validates_address สำหรับ AddressValidator) เมื่อฉันรวมทั้ง monkeypatch และ Validator ใน app / validators / address_validator.rb จะโหลดเฉพาะอ็อบเจ็กต์ AddressValidator เท่านั้นไม่ใช่ Monkeypatch พวกคุณมีพฤติกรรมเดียวกันหรือไม่?
jshkol

1
spring stopจำเป็นสำหรับฉันใน Rails 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

7
@Jakub ใช่มี: หลักการความรับผิดชอบเดียว
mattwynne

2
ลิงก์ไปยังเอกสารอย่างเป็นทางการเสีย นี่คือตำแหน่งปัจจุบันของเอกสารนั้น guide.rubyonrails.org/…
Stijnster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.