J'ai actuellement un contrôleur qui va gérer un appel pour exporter une table dans un fichier CSV en utilisant la gemme FasterCSV. Le problème est que les informations stockées dans la base de données ne sont pas claires parfois et je veux donc changer la sortie pour une colonne particulière.Changement de sortie pour FasterCSV
Ma colonne project.status a par exemple des nombres au lieu de statuts, ie 1 dans la base de données correspond à Active, 2 à Inactive et 0 à Not Yet Yet. Quand j'exporte le tableau, il montre 0,1,2 au lieu de Actif, Inactif ou Pas encore décidé. Une idée de comment mettre en œuvre cela?
J'ai essayé une simple boucle qui vérifie le fichier CSV généré en dernier et modifie chaque 0,1,2 à sa sortie correspondante, mais le problème est que toutes les autres colonnes qui avaient un 0,1,2 changeraient aussi. Je ne suis pas sûr de savoir comment isoler la colonne. Merci d'avance
def csv
qt = params[:selection]
@lists = Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions => ["name LIKE ? OR description LIKE ?", "%#{qt}%", "%#{qt}%"])
csv_string = FasterCSV.generate(:encoding => 'u') do |csv|
csv << ["Status","Name","Summary","Description","Creator","Comment","Contact Information","Created Date","Updated Date"]
@lists.each do |project|
csv << [project.status, project.name, project.summary, project.description, project.creator, project.statusreason, project.contactinfo, project.created_at, project.updated_at]
end
end
filename = Time.now.strftime("%Y%m%d") + ".csv"
send_data(csv_string,
:type => 'text/csv; charset=UTF-8; header=present',
:filename => filename)
end
J'ai le mien écrit comme ceci STATUS = {: APPLYING => 0,: REJECTED => 1,: READY => 2,: SUSPENDED => 3,: PENDING => 4} .freeze, où tout est en un variable. Je suis toujours confus quant à pourquoi je devrais modifier mon modèle. La vue ou le contrôleur ne devrait-il pas gérer cela? – TheRealVayne
Pas du tout, le modèle est en charge de toute la logique métier, qui dans ce cas serait la traduction des champs stockés de la base de données en champs lisibles par l'homme. Le modèle peut être utilisé par de nombreuses vues et contrôleurs, et dupliquer le code pour fournir un statut lisible serait un anti-pattern assez significatif. –