Rails 3 nên lưu trữ trình xác thực tùy chỉnh ở đâu?


93

Tôi đã thấy các tài liệu / trang web cho thấy rằng trình xác thực tùy chỉnh nên đi trong một /libhoặc /lib/validatorsthư mục của một dự án. Tôi đã tìm thấy (bằng cách đọc câu trả lời cho một bài đăng khác) rằng chúng dường như chỉ hoạt động config/initializers. Có ai biết hoặc có một con trỏ đến tài liệu chính thức cho thấy nơi trình xác thực tùy chỉnh nên sống không?


Câu trả lời:


220

Nếu bạn đặt trình xác thực tùy chỉnh của mình, app/validatorschúng sẽ tự động được tải mà không cần thay đổi config/application.rbtệp của bạn .


Tôi không biết liệu bạn có cần thêm đá quý / cấu hình nào đó cho việc này hay không, nhưng trong rails 3.2.8, điều này không hoạt động. Cụ thể, chỉ cần thả trình xác thực của bạn vào ứng dụng / trình xác thực / ???. Rb không hoạt động.
Doug

17
Doug cố gắng đặt tên cho tệp trình xác thực giống như cách đặt tên cho lớp trình xác thực nhưng bị gạch dưới: MyCoolValidator chuyển đến app / validators / my_cool_validator.rb
tương đương

14
@Doug bạn cần khởi động lại máy chủ của mình. Các đường dẫn tự động tải được mở rộng khi khởi tạo nên các thư mục con mới sẽ không được chọn cho đến khi bạn làm điều đó.
Timo

Tôi cũng muốn kết hợp Monkeypatch ActiveModel :: Validations :: HelperMethods để thêm trình trợ giúp cho xác thực mới của tôi (ví dụ: validates_address cho AddressValidator). Khi tôi đưa cả Monkeypatch và Validator vào app / validators / address_validator.rb, chỉ đối tượng AddressValidator được tải chứ không phải Monkeypatch. Các bạn có đang trải qua hành vi tương tự không?
jshkol

1
spring stoplà cần thiết đối với tôi trong Rails 5.2, nếu không thì nó không được chọn.
Jack Kinsella

15

Nếu bạn thêm cái này vào tệp /config/application.rb của mình:

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

Sau đó, Rails sẽ tự động tải các trình xác thực của bạn khi khởi động (giống như / config / initializers /), nhưng bạn giữ cấu trúc rõ ràng của việc có các trình xác nhận của mình ở một vị trí đẹp và được đặt tên tốt.


9
Ý tưởng hay nhưng mã của bạn cần được dọn dẹp: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorscho đến nay dường như sạch nhất. Tuy nhiên, bạn có thể cần phải tải chúng vào trước các mô hình của mình, vì vậy có thể từ trình khởi tạo.


4

Đây là tài liệu chính thức về xác thực tùy chỉnh. AFAIK là một thực tiễn tốt để giữ chúng trong các mô hình phù hợp.


5
Trừ khi chúng áp dụng cho nhiều kiểu máy, trong trường hợp đó bạn nên giữ chúng ở nơi khác để KHÔNG KHÔ.
Andrew Marshall

Đó là những gì họ có thể là bởi vì nếu không thì có rất ít điểm trong việc tạo một lớp riêng cho họ.
Jakub Hampl

7
@Jakub Có đó là: Nguyên tắc trách nhiệm duy nhất
mattwynne

2
Liên kết đến các tài liệu chính thức bị hỏng. Đây là vị trí hiện tại của tài liệu đó; Guide.rubyonrails.org/…
Stijnster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.