У меня есть поля формы, в которые пользователь вводит:
- проценты:
50.5%
- деньги:
$144.99
- даты:
Wednesday, Jan 12th, 2010
...
Атрибуты типа percent
и money
сохраняются как поля decimal
с ActiveRecord, а даты - как поля datetime
или date
.
Легко конвертировать между форматами в javascript, и вы можете теоретически преобразовать их в приемлемый формат activerecord onsubmit
, но это не приличное решение.
Я бы хотел что-то переопределить средства доступа в ActiveRecord, поэтому, когда они установлены, он преобразует их из любой строки в соответствующий формат, но это тоже не лучший вариант.
Чего я не хочу, так это запускать их через отдельный объект процессора, для чего в контроллере потребуется нечто подобное:
def create
# params == {:product => {:price => "$144.99", :date => "Wednesday, Jan 12, 2011", :percent => "12.9%"}}
formatted_params = Product.format_params(params[:product])
# format_params == {:product => {:price => 144.99, :date => Wed, 12 Jan 2011, :percent => 12.90}}
@product = Product.new(format_params)
@product.save
# ...
end
Я бы хотел, чтобы он был полностью прозрачным. Где хук в ActiveRecord, поэтому я могу сделать это Rails Way ?
Обновление
Я просто делаю это сейчас: https://gist.github.com/727494
class Product < ActiveRecord::Base
format :price, :except => /\$/
end
product = Product.new(:price => "$199.99")
product.price #=> #<BigDecimal:10b001ef8,'0.19999E3',18(18)>