2012-04-15 5 views
24

私は、次のモデルフィールドの検証を持っている:空の値を無視して一意性を保証するための検証?

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

問題は、このフィールドはオプションであることで、空/ nilの値が既に取ら頭字語であるとして戻っています。私は値が提供されている頭字語がユニークであることを検証したいだけです..もし実際の値があればこの検証を更新する方法はありますか?

おかげ

答えて

53

はい、オプションのフィールドの検証に渡すことができる2つの可能なオプションがあります::allow_blankまたは:allow_nil、それぞれblanknilフィールドにバリデーションをスキップします。検証を次のように変更すると、必要な動作が得られます。

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

ありがとうございます!私のコードはより包括的になっています。他の答えは、を使って示唆されています:unlessまたは:if、しかし私はこれが最善の方法だと思います。 group_idを配列から解放する際の問題はありますか? –

+1

この仕様は 'it {is_expected.to validate_uniqueness_of(:略語).scoped_to(:group_id).case_insensitive.allow_blank}'です。 –

関連する問題