質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top