0
我有一個問題,在運行驗證之前剝離美元符號和逗號。出於某種原因,保存時該值將被設置爲0
。從before_validation回調中的字符串轉換貨幣的問題
class Property < ActiveRecord::Base
before_validation :format_currency
validates :street_name_1, presence: true
validates :city, presence: true
validates :state, presence: true
validates :postal_code, presence: true
validates :rate, presence: true, numericality: true
private
def format_currency
self.rate = rate.to_s.gsub(/[^0-9\.]/, '').to_i # Strip out non-numeric characters
end
end
當我做'$3,500'.to_s.gsub(/[^0-9\.]/, '').to_i
在軌安慰它正確返回「3500」。 rate
也正在從表單中正確地傳遞給模型。
對於我的生活,我無法弄清楚爲什麼它不能正確設置保存的值。任何幫助,將不勝感激。
編輯:我需要重寫默認setter,並在設置速率時由於數據庫列是整數而執行我的gsub。
def rate=(rate)
write_attribute(:rate, rate.to_s.gsub(/[^0-9\.]/, '').to_i)
end
我實際上試圖將格式($ 3,500)的東西保存到數據庫。而不是相反。我計算出來並用答案更新了我的問題。 – Mike
@ user3197108查看我的更新。但是爲什麼不在保存'rate'列之前添加'$'?爲什麼打擾正則表達式的複雜性? – Mohamad
我認爲你沒有正確理解我。用戶會在表單中輸入類似「$ 3,500」的東西,然後傳遞給模型。該模型有一個「比率」列,它是一個整數。我無法將$或$存儲在整數列中。我只需要原始整數。 – Mike