Tôi muốn tạo chức năng xác thực tùy chỉnh sẽ không cho phép trường được lưu trống/không nếu trường hiện tại không trống trong cơ sở dữ liệu. Làm cách nào để truy cập giá trị cơ sở dữ liệu (giá trị cũ) trong hàm xác thực? Tôi có thể truy cập giá trị mới bằng self.name_of_field.Đường ray: So sánh giá trị cũ và giá trị mới trong quá trình xác nhận chỉnh sửa
Đây là những gì tôi có ngay bây giờ
validate :image_remote_url_change
def image_remote_url_change
if self.image_remote_url.blank? and self.image_remote_url_changed?
errors.add(:field, "can't be blank once set")
return false
end
end
Ngay bây giờ nếu tôi cố gắng chỉnh sửa một đối tượng đang tồn tại, nó sẽ không chấp nhận một giá trị mới của sản phẩm nào nhưng khi tạo một đối tượng mới nó sẽ nói "có thể không được để trống khi đã đặt "mặc dù giá trị cũ chưa bao giờ được đặt.
+1. Schneems, từ Heroku, có một [bài viết ngắn] (http://schneems.com/post/28425724540/get-previously-saved-changes-in-rails) thảo luận về phương pháp before_changes, có thể giúp bạn quá – stephenmurdoch
Doesn ' t điều này chỉ làm việc mặc dù nếu đối tượng thực sự thay đổi? như trong nó đã được lưu thành công. Tôi chỉ làm điều này trên bước xác thực –
@glumbo hãy dùng thử và xem – stephenmurdoch