Je champs de formulaire où l'utilisateur entre dans:Rails Way: Formatage de la valeur avant de le définir dans le modèle?
- :
50.5%
Percents
- argent:
$144.99
- dates:
Wednesday, Jan 12th, 2010
...
Le percent
et money
les attributs de type sont enregistrés sous le champ decimal
s avec ActiveRecord, et les dates sont les champs datetime
ou date
.
Il est facile de convertir entre les formats en javascript, et vous pouvez théoriquement les convertir au format acceptableecommandecord onsubmit
, mais ce n'est pas une solution décente.
Je voudrais faire quelque chose remplacer les accesseurs dans ActiveRecord ainsi quand ils sont définis il les convertit de n'importe quelle chaîne au format approprié, mais ce n'est pas le meilleur non plus.
Ce que je ne veux pas est d'avoir à les exécuter à travers un objet processeur séparé, ce qui nécessiterait quelque chose comme ceci dans un contrôleur:
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
Je voudrais que ce soit complètement transparent. Où est le crochet dans ActiveRecord donc je peux le faire le Rails Way?
Mise à jour
que je fais tout ce pour l'instant: 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)>
Il est petit bijou nommé « attribute_normalizer » qui fait ce travail –