2012-02-10 34 views
6

Tôi đang học RoR vào lúc này, và tôi nghĩ tôi phải hiểu nhầm điều gì đó.Tại sao tôi không thể kiểm tra xác thực ActiveRecord trong bảng điều khiển?

Tôi có một người dùng gọi lớp ActiveRecord, với xác thực đơn giản về: tên và: email như hiện diện: true, length: {maximum: 15}, v.v. Tôi nghĩ tôi sẽ kiểm tra tính hợp lệ trong bảng điều khiển. Tôi đi vào giao diện điều khiển đường ray (env phát triển), và tạo một trường hợp mới với một tên quá dài, chẳng hạn như user_instance = User.new (tên: "aaaaabbbbbcccccddddd", email: "").

Xác thực không phát sinh bất kỳ lỗi nào. Khi tôi thử user_instance.save, bản ghi sẽ không ghi vào DB, vì vậy nó rõ ràng làm việc tốt ở giai đoạn đó. Tôi đang làm gì sai?

Trả lời

13

Khi bạn muốn để có được một ngoại lệ huy động về tiết kiệm kỷ lục, sử dụng save! thay vì save (cùng với update/update!, create/create!).

Với save bạn sẽ không có ngoại lệ nếu có lỗi xác thực, nó sẽ chỉ trả lại false. Bạn cũng có thể kiểm tra xem có lỗi trên một phiên bản với user_instance.valid? và gặp lỗi với user_instance.errors hay không.

Xem When Does Validation Happen?.

+0

Cảm ơn Florent2, rất hữu ích – micklec

+0

Siêu hữu ích - đã chuyển sang đường ray trong hơn một năm và bằng cách nào đó điều này đã bỏ qua tôi – Polsonby

+0

Có lẽ điều này có sẵn trong phiên bản mới hơn của 'Rails', tôi sử dụng' user_instances.errors.full_messages'. Bạn được hiển thị các lỗi ở định dạng có thể đọc được của con người. – Tass

5

xác thực sẽ không ném lỗi nếu bạn cố gắng đặt dữ liệu không hợp lệ trên mô hình của mình, tuy nhiên lưu sẽ không thành công.

nếu bạn muốn kiểm tra xem xác thực có hoạt động chính xác không, chỉ cần kiểm tra user.valid? và phải trả về false

sau khi gọi hợp lệ?, bạn có thể kiểm tra user.errors để biết các lỗi cụ thể được đặt trên mô hình của bạn.

+0

Cảm ơn, Bassam, điều đó có ý nghĩa với tôi bây giờ và tôi có thể thấy user_instance.valid? đang trả về một băm @messages với các kết quả xác thực. – micklec

+0

@micklec tuyệt vời !! vui vì tôi có thể giúp !! –

Các vấn đề liên quan