5

我想在我的自定义的验证应用范围限制使用范围Rails中的自定义验证

我有有制造商,型号,SERIAL_NUMBER,VIN为属性

现在我有一个自定义这个产品型号 验证要检查VIN如果VIN不存在于数据库这样的事情

验证检查制造商+型号+ SERIAL_NUMBER独特的组合:combination_vin,如果=>“vin.nil?”

def combination_vin 
    if Product.exists?(:make => make,:model => model,:serial_number => serial_number) 
     errors.add(:base,"The Combination of 'make+model+serial_number' already present") 
    end 
end 

我想在这个验证引入作用域对USER_ID

现在我知道我可以很容易地写使用

def combination_vin 
    if Product.exists?(:make => make,:model => model,:serial_number => serial_number,:user_id => user_id) 
     errors.add(:base,"The Combination of 'make+model+serial_number' already present") 
    end 
end 

达到相同的,但出于好奇,我想是否有一个范围验证器(如{:scope =>:user_id})在自定义验证 上,这样我就不必再通过那个额外的user_id是否存在?哈希

感谢

回答

6

尝试:

validate :combination_vin , :uniqueness => { :scope => :user_id } , :if => "vin.nil?"