2010-04-19 6 views
0

J'importe actuellement un fichier CSV dans un élément activerecord mais je ne peux pas choisir d'analyser les éléments comme dis ints ou decimals au cas par cas en utilisant fastercsv. Je peux soit choisir d'analyser tout comme un int ou l'autre, ou tous comme des chaînes. J'ai besoin d'analyser certaines colonnes comme ints, certaines comme des décimales et d'autres comme des chaînes.fastercsv analyse en int ou autre dans ActiveRecord

Sinon, y a-t-il un moyen, après avoir tout analysé comme des chaînes, de convertir et de mettre à jour des éléments individuels de l'enregistrement actif vers le nouveau formulaire? Dites les valeurs d'analyse en tant que chaînes puis convertissez certaines valeurs en ints, d'autres en decs, etc.

Répondre

0

Fournissez simplement les données à ActiveRecord sous forme de chaîne. ActiveRecord connaît votre schéma de base de données et sait comment analyser l'entrée. Par exemple, vous n'avez pas besoin de convertir une chaîne en nombre entier lorsque vous définissez la valeur d'une clé étrangère.

r = Record.create :relation_id => "3" 
r.relation_id 
# => 3 
# note the difference between "3" and 3 
0

Pour une utilisation générale, la réponse de Simone est meilleure. Cela dit, si vous devez faire quelque chose avec les données (vérifications conditionnelles, mathématiques, etc.) avant de créer un objet d'enregistrement actif, vous pouvez fournir des convertisseurs personnalisés pour les champs dont vous avez besoin.

Pour un exemple, regardez la méthode test_convert_with_custom_code_using_field_info dans http://fastercsv.rubyforge.org/svn/trunk/test/tc_data_converters.rb