8 Stimmen

Rails Way: Formatierung von Werten vor dem Setzen im Modell?

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)>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X