2011-04-25 19 views
7

tôi muốn xác nhận độc đáo của hai đệ nhưng nếu thứ hai đệ là con số không chỉ cần bỏ qua xác nhận tôi có hai mô hình 'tài sản' và 'Công ty' Asset có một độc đáo mã định danh những gì tôi muốn làm là để xác nhận tính duy nhất của mã định danh của tài sản với công ty. chúng ta có thể kiểm tra điều này bằng cáchValidate độc ​​đáo của hai đệ nhưng tránh nếu một giây là null

class Asset < ActiveRecord::Base 
    validates :identifier, :uniqueness => {:scope => :company_id} 
end 

nhưng điều này cũng không cho phép con số không cho hai tài sản

làm thế nào tôi có thể bỏ qua xác nhận của độc đáo của mã số nhận dạng nếu nó nil

chúng ta có thể vượt qua một khối, hoặc thêm except hoặc một số thứ tương tự mà chúng tôi có thể thực hiện với bộ lọc trong bộ điều khiển, tôi đang tìm kiếm một số giải pháp như

xác thực: số nhận dạng,: uniqueness => {: scope =>: company_id} trừ khi {: identifier.is_nil? }

tôi có thể bỏ qua xác thực bằng một số cuộc gọi lại xác thực trước không ??

Trả lời

10

của Ruby 1.8.7

validates :identifier, :uniqueness => { :scope => :company_id } , :unless => lambda { |asset| !asset.identifier.nil? } 

của Ruby 1.9.3

validates :identifier, :uniqueness: { scope: :company_id }, unless: lambda { |asset| !asset.identifier.nil? } 
0

này đã làm việc cho tôi trong Rails 4.0.1:

validates_uniqueness_of :identifier, :scope => :company_id, :allow_blank => true 

tôi có thể tạo các đối tượng với trống số nhận dạng nhưng không thể tạo hai đối tượng có cùng số nhận dạng trong cùng một công ty.

PS: Tôi biết điều này đã được đăng một thời gian dài trước đây, nhưng cách làm này cũng có vẻ tốt. Dưới đây là Link cho câu hỏi tương tự về sau mà tôi đã tìm thấy câu trả lời.

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