Я думаю, вы делаете все правильно. Этот тест проходит:
test "should remove commas from thenumber" do
f = Foo.new(:thenumber => "10,000")
f.save
f = Foo.find(f.id)
assert f.thenumber == "10000"
end
И я использовал твой код.
class Foo < ActiveRecord::Base
before_validation :normalize
def normalize
self['thenumber'] = self['thenumber'].to_s.gsub(',','')
end
end
Теперь моя схема настроена так, чтобы тогда число было строкой, а не целым числом.
Started
.
Finished in 0.049666 seconds.
1 tests, 1 assertions, 0 failures, 0 errors
Если вы хотите сохранить это в БД как целое число, то вам определенно нужно переопределить установщик:
def thenumber=(value)
self['thenumber'] = value.to_s.gsub(',','').to_i
end
Если вы делаете это по-своему, с целочисленным столбцом, оно усекается AR ....
>> f.thenumber = "10,000"
=> "10,000"
>> f.thenumber
=> 10
Это малоизвестная вещь с Ruby и целыми числами ... она автоматически преобразуется путем усечения всего, что больше не является целым числом.
irb(main):004:0> i = "155-brian-hogan".to_i
=> 155
Может быть круто для таких вещей, как
/users/155-brian-hogan
@user = User.find_by_id(params[:id])
Но не очень круто для того, что ты делаешь.
Так что либо измените col на строку и используйте фильтр, либо измените setter:)
Удачи!