2012-04-15 40 views
24

Tôi có xác nhận lĩnh vực mô hình sau:Xác thực để đảm bảo tính duy nhất của nhưng bỏ qua các giá trị rỗng?

validates_uniqueness_of :acronym, :scope => [:group_id], :case_sensitive => false 

Vấn đề là lĩnh vực này là không bắt buộc, và một con số không giá trị/trống đang trở lại như là một từ viết tắt đã được sử dụng. Tôi chỉ muốn xác nhận rằng một từ viết tắt là duy nhất nếu một giá trị được cung cấp .. Có cách nào để cập nhật xác thực này chỉ diễn ra nếu có một giá trị thực tế .. không nil/trống?

Cảm ơn

Trả lời

53

Vâng, có hai tùy chọn có thể là bạn có thể vượt qua để kiểm chứng thực cho các lĩnh vực bắt buộc: :allow_blank hoặc :allow_nil, mà sẽ bỏ qua kiểm chứng thực trên blanknil lĩnh vực tương ứng. Nếu bạn thay đổi xác thực thành những điều sau, bạn sẽ nhận được hành vi mà bạn muốn:

validates_uniqueness_of :acronym, :allow_blank => true, :scope => [:group_id], :case_sensitive => false 
+0

Cảm ơn rất nhiều! Mã của tôi trở nên toàn diện hơn. Các câu trả lời khác được đề xuất sử dụng: trừ khi hoặc: nếu, nhưng tôi nghĩ đây là cách tốt nhất. Bất kỳ vấn đề trong việc cho phép: group_id ra khỏi mảng? –

+1

Thông số này là 'it {is_expected.to validate_uniqueness_of (: từ viết tắt) .scoped_to (: group_id) .case_insensitive.allow_blank}' –

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