2009-10-07 6 views
1

J'ai donc un modèle dont j'ai besoin pour pouvoir sérialiser/lire à partir d'un document Excel (XLS). Je suis un peu perplexe quant à l'origine de ce code. Ma première pensée est que le to_xls est une vue, mais après avoir piquer autour et voir des choses comme (to|from)_xml et (to|from)_json dans ActiveRecord, je me demandais si peut-être ce truc appartenait dans le modèle. Alternativement, appartient-il dans juste un conteneur séparé entier quelque part?Où mettre to_xls et from_xls dans une application rails

Pour ce que ça vaut, les utilisateurs téléchargent des modèles du site, les modifient dans Excel, puis les publient.

Répondre

0

to_xls devrait définitivement être une vue. Je vais essayer un /app/views/foos/show.xls.erb, mais si vous n'aimez pas les vues ERB pour XLS, essayez le RbTemplateHandler pour faire du rendu en Ruby pur.

from_xls est une bête complètement différente. Cela n'appartient certainement pas à un contrôleur. Il appartient logiquement au modèle, mais je l'extrais dans un mixin. Si vous êtes seulement tirer XLS pour un modèle, puis la configuration suivante devrait suffire:

# app/models/foo.rb 
class Foo 
    extend XLS2Foo 
    ... 
end 

# lib/foo_from_xls 
module XLS2Foo 
    def to_foo(xls) 
    ... 
    end 
end 

Si vous devez le faire pour un tas de modèles, vous pouvez essayer un analyseur DSL générateur en vous lib répertoire et déclarez-vous des analyseurs pour chaque modèle dans les classes de modèle.

+0

Réalisé que j'ai besoin de faire la même chose pour un couple de modèles, essentiellement la sérialisation d'une table arborescente. Le problème principal est de savoir si je le déclare comme un mix-in modèle, ou comme quelque chose qui agit sur des modèles qui sont une certaine structure. –

0

à/from_xls ne sont pas pris en charge par Rails. Il y a un plugin, mais je ne l'ai pas utilisé to_xls plugin for Rails. Une meilleure façon pourrait être pour vous d'aller à et à partir d'un CSV en utilisant FasterCSV et obtenir quelque chose qui est utilisable. Voici un exemple: Export to_csv from ActiveRecord

+0

J'ai des fonctions écrites pour faire ce que je veux faire. J'essaie de me concentrer sur l'endroit où je devrais mettre le code. –

Questions connexes