Ich habe Formularfelder, in die der Benutzer etwas eingibt:
- Prozentsätze:
50.5%
- Geld:
$144.99
- Daten:
Wednesday, Jan 12th, 2010
...
El percent
y money
Typattribute werden gespeichert als decimal
Felder mit ActiveRecord, und die Daten sind datetime
o date
Felder.
Es ist einfach, zwischen den Formaten in Javascript zu konvertieren, und Sie könnten sie theoretisch in das von activerecord akzeptierte Format umwandeln onsubmit
aber das ist keine vernünftige Lösung.
Ich möchte etwas tun, überschreiben die Accessoren in ActiveRecord, so dass, wenn sie festgelegt sind, es konvertiert sie von jeder Zeichenfolge in das entsprechende Format, aber das ist nicht das beste entweder.
Was ich nicht möchte, ist, dass ich sie durch ein separates Prozessorobjekt laufen lassen muss, was so etwas wie dieses in einem Controller erfordern würde:
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
Ich möchte, dass sie völlig transparent ist. Wo ist der Haken in ActiveRecord, so dass ich dies tun können die Schiene Weg ?
Update
Ich tue dies nur für den Moment: 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)>