在Rails自定义验证中使用范围

时间:2012-04-18 05:03:04

标签: ruby-on-rails ruby-on-rails-3 validation ruby-on-rails-3.2 rails-3.1

我想在自定义验证中应用范围限制器

我有这个产品型号 其中有make,model,serial_number,vin作为属性

现在我有一个自定义验证来检查vin,如果vin不存在,以检查数据库中make + model + serial_number唯一性的组合,就像这样

  

验证:combination_vin,:if => “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 ?散列

由于

1 个答案:

答案 0 :(得分:6)

尝试:

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