6

カスタム検証でスコープ リミッターを適用したい

属性としてmake、model、serial_number、vinを持つこの製品モデルがあります

これで、データベース内の make+model+serial_number の一意性の組み合わせを確認するために vin が存在しない場合、vin に対してチェックするカスタム検証があります。

validate :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を渡す必要はありませんか? ハッシュ

ありがとう

4

1 に答える 1

6

試す :

validate :combination_vin , :uniqueness => { :scope => :user_id } , :if => "vin.nil?"
于 2012-04-18T05:17:00.977 に答える