これは非常にばかげた質問なので、単純なものが欠けているに違いないと感じています。フィールドのあるフォームがありquantity
ます。人々は数量を入力するときにカンマを入力し続けるので (たとえば、12,000を示すために入力します)、データベースの整数列に12,000
数量 (例) を保存する前にカンマを削除したいと思います。12000
これまでのところ、2つの方法を試しました。このSOの質問で提案されているセッターメソッドをオーバーライドする
def quantity=(num)
num.gsub!(',', '') if num.is_a?(String)
self[:quantity] = num.to_i
end
これはある意味で機能します。12,000
数量フィールドに入力してフォームを送信する12000
と、データベースに入ります。quantity
問題は、すべての検証もバイパスすることです。たとえば、数量の値の存在を検証できなくなりました。これは良くない。
また、(セッターをオーバーライドする代わりに) 検証前のコールバックを使用しようとしました。
before_validation :sanitize_quantity
def sanitize_quantity
# Doesn't wok because quantity.to_i already called by this point.
end
数量がコールバック メソッドに到達するまでに、Rails は既にそれを呼び出しているため、これは機能しませんto_i
。これは、コールバックに到達するまでに12,000
切り捨てられることを意味します。12
繰り返しますが、良くありません。
クライアント側でコンマを削除する以外に、他に何を試すことができますか?
最後に、特定の国ではピリオドとコンマの使い方が異なるため、これは本質的にばかげたことだと認識しています。とにかくやるしかない。