Nếu bạn cần mã xác nhận phức tạp đáng kể, lỗi đôi khi không nằm trong một thuộc tính cụ thể, nhưng trong một sự kết hợp của một số thuộc tính. Ví dụ: nếu tôi muốn xác thực rằng khoảng thời gian giữa: start_date và: end_date không chứa bất kỳ chủ nhật nào, lỗi không thuộc về một trong hai trường đó, nhưng phương pháp thêm lỗi yêu cầu chỉ định nó.Có thể thêm lỗi vào đối tượng ActiveRecord mà không liên kết chúng với thuộc tính cụ thể không?
20
A
Trả lời
29
Hãy thử làm một cái gì đó như thế này:
# Your Model.rb
validate :my_own_validation_method
...
private
def my_own_validation_method
if there_is_no_sunday_in_the_range
self.errors[:base] << "You must have a Sunday in the time range!"
end
end
Về cơ bản, bạn có thể thêm kiểm chứng thực phức tạp của riêng bạn để một mô hình, và khi bạn nhìn thấy điều gì đó sai lầm đã xảy ra, bạn có thể thêm một chuỗi lỗi trong mảng lỗi.
5
Bạn có thể sử dụng errors[:base]
để thêm các lỗi chung không được liên kết cụ thể với một thuộc tính - rails guide link.
7
model_instance.errors[:base] << "msg"
1
Bạn thực sự có thể đặt tên cho khóa băm bất cứ điều gì bạn muốn:
instance.errors[:case_of_the_sundays] << "Error, son."
mô tả nhiều hơn Chỉ cần một chút.
0
Câu trả lời ở trên đã lỗi thời. Đối với Rails 5 trở lên, bạn cần gọi phương thức ActiveModel::Errors add với tham số đầu tiên là :base
. Xem ví dụ bên dưới.
model_instance.errors.add(
:base,
:name_or_email_blank,
message: "either name or email must be present"
)
Các vấn đề liên quan
- 1. Đường ray: có thể thêm thuộc tính bổ sung vào liên kết has_and_belongs_to_many không?
- 2. WPF - Kiểu nhóm: Chúng tôi có thể chỉ liên kết với thuộc tính "Tên" không?
- 3. Có thể lấy chuỗi tên thuộc tính đối tượng mà không tạo đối tượng đối tượng không?
- 4. Sử dụng redirect_to với đối tượng ActiveRecord cụ thể để tạo liên kết đến đối tượng đó
- 5. Cách thêm thuộc tính mới vào ActiveRecord
- 6. Có thể nghe các thay đổi đối với thuộc tính của đối tượng trong JavaScript không?
- 7. AttributeError: đối tượng 'numpy.ndarray' không có thuộc tính 'thêm'
- 8. Tại sao bạn không thể thêm thuộc tính vào đối tượng trong python?
- 9. Bạn có thể liên kết DataTrigger với thuộc tính được đính kèm không?
- 10. Khuôn khổ thực thể-Cách thêm vào các đối tượng có thuộc tính điều hướng
- 11. Mô-đun có thể có các thuộc tính giống như cách đối tượng có thể không?
- 12. Có thể liên kết các thuộc tính kiểu phức với một DataGrid không?
- 13. AttributeError: đối tượng 'module' không có thuộc tính 'strptime' - Lỗi có thể xảy ra?
- 14. Thuộc tính đối tượng JavaScript có thể tham chiếu đến thuộc tính khác của cùng một đối tượng không?
- 15. Thuộc tính "Không thể thay đổi ActiveConnection của đối tượng Recordset có lỗi đối tượng Lệnh là gì?"
- 16. đối tượng không có thuộc tính '__getitem__'
- 17. Python: AttributeError: đối tượng 'NoneType' không có thuộc tính 'thêm'
- 18. Thuộc tính PythonError: Đối tượng không có thuộc tính
- 19. Lỗi Python: AttributeError: đối tượng 'module' không có thuộc tính
- 20. Python subprocess "đối tượng không có thuộc tính 'fileno'" lỗi
- 21. Đối tượng RX - chúng có thể tránh được không?
- 22. Java/JAXB: XML Unmarshall thuộc tính cho đối tượng Java cụ thể thuộc tính
- 23. Thêm các thông tin thêm thời gian chạy vào đối tượng activerecord
- 24. đối tượng 'RelatedManager' không có thuộc tính
- 25. Có thể tạo thuộc tính khi đang bay, với đối tượng động .NET không?
- 26. Lỗi: Cursor 'đối tượng không có thuộc tính' _last_executed
- 27. Lỗi "Không thể chèn đối tượng" khi thêm điều khiển ActiveX như Microsoft DataGrid vào trang tính Excel
- 28. Có thể thêm một neo/param vào liên kết với Kaminari không?
- 29. Python: Thuộc tính Lỗi - đối tượng 'NoneType' không có thuộc tính 'cái gì'
- 30. Bạn có thể liên kết toàn bộ đối tượng với CommandParameter trong XAML không?
Tuyệt vời, đây chỉ là những gì tôi cần. Không thể tìm thấy nó trong tài liệu –
Điều gì là: cơ sở trong băm lỗi? – holaSenor
Cũng bình thường, bạn có thể thêm lỗi vào một thuộc tính cụ thể. Ví dụ: nếu bạn có mô hình 'Người dùng' có thuộc tính' tuổi', bạn có thể muốn thêm lỗi cho thuộc tính đó, vì vậy bạn sẽ viết 'self.errors [: age] <<" không được nhỏ hơn 0 "' sẽ tạo ra lỗi như "Độ tuổi không được nhỏ hơn 0". Nhưng nếu lỗi không phải là về bất kỳ thuộc tính cụ thể nào, bạn có thể thêm nó vào cơ sở, tức là với chính mô hình đó. Vì vậy, 'self.errors [: base] <<" Mọi thứ đều sai! "' Làm cho thông báo lỗi "Mọi thứ đều sai!"; nó không được kết nối với bất kỳ thuộc tính cụ thể nào. – MrDanA