検証が成功した後のデータ変換
-
08-10-2019 - |
質問
UPC文字列コードを正規化するのに少し問題があり、データベースに同じ形式で保存できるようにしています。
私は使用しています ean
文字列が良いかどうかを確認するために(これは正常に動作しています)が、次のような検証後に割り当てコードをスローする場合
validate :upc_check
def upc_check
if !upc.nil?
if !upc.ean?
errors.add(:upc, 'is not a valid UPC.')
else
upc = upc.strip
end
end
end
ストリップコールは、文字列であるため、単なる例です。私は実際にUPCのダッシュを削除します。
上記のコードは実際に保存しないため、うまく機能しません。次のようなメソッドのトリガーを見てみました
after_validation :normalize_upc
def normalize_upc
upc = upc.strip
end
..しかし、上記も機能しません。
検証後にデータを検証および変換するために、皆さんは何をしますか?
解決
Validatorを厳密にしてから、Before_Validationフィルターを使用して必要な変換を行います。
他のヒント
UPCのモデルのセッターメソッドをオーバーライドし、それを正規化するための個別の方法を持たないことをお勧めします。これは次のようなもので達成されます。
def upc=(value)
self.upc = value.strip
end
編集:
また、この機能を削除するための検証方法をクリーンアップします。
validate :upc_check, :unless => lambda {|m| m.upc.nil?}
def upc_check
errors.add(:upc, 'is not valid') unless upc.ean?
end
所属していません StackOverflow