データベーステーブルにdollars
という整数列があり、データベースに$1000
などの値を保存しようとしています。ただし、文字列$1000
をドル記号で整数列に保存しようとすると、整数0
に自動的に変換されます。整数としてデータベースに保存する前に文字列データを整理する
これを防ぐために、ドル記号を削除するために私のモデルのclean_data
メソッドにbefore_save
コールバックを追加しようとしました。しかし、clean_data
が呼び出される前に、すでにレールに$1000
文字列をデータベースに保存しようとしているようです。
データベースに整数として保存する前に、ドル記号を値から削除するほうが良いのでしょうか?ここで
は私のコードです:bids_controller.rb
のcreate
アクションで
、これを実行すると、データベースが正常にフォームから値$1000
を保存できるようになります。しかし
# Remove dollar sign
if params[:bid][:dollars][0] == "$"
params[:bid][:dollars] = params[:bid][:dollars].delete('$')
end
@bid = Bid.new(params[:bid])
@bid.save
、私は削除した場合コントローラーのif-endフラグメントを次のようにモデルのデータでクリーニングします。
before_save :clean_data
def clean_data
puts self.dollars
self.dollars = self.dollars.delete('$')
end
0
のputs self.dollars
には、clean_data
メソッドでドル記号を削除する前に値が取得されます。
私の仮説は、レールが呼ばれclean_data
またはsave
いずれかの前に、データベース内のデータを「ホールド」しようとしたことで、この「ホールド」整数列ができないので、データが0
に変換されますドル記号を保存します。
ありがとうございました! :)
あなたがうまくやっているように聞こえるので、あなたのコードを質問に表示してください。 – lucapette
こんにちは、私はコードを含めるように私の質問を更新しました。助けてくれてありがとう! –
@MingCあなたは解決策を見つけましたか? – Luccas