2008-10-02 6 views
6

Étant paresseux (et aimant le code DRY), je suis le genre de gars qui va écrire quelques petits emballages pour les balises HTML récurrentes. Ceux fournis par Rails sont déjà bons, mais parfois j'ai quelque chose de plus spécifique que je sais que je vais répéter encore et encore.Avec Rails, où devrais-je mettre des extraits html? Je ne veux pas de partiels, mais je veux les recharger pendant le développement

Dans certaines situations, une solution partielle peut être la solution, mais parfois je vais juste appeler le fragment trop souvent pour justifier les frais généraux d'utilisation des partiels.

En ce moment je crée un fichier helpers/html_helper.rb et je les mets dedans. Le problème est que les assistants ne sont pas rechargés dynamiquement par requête pendant le développement. Donc, chaque fois que je modifie mon extrait ou le code qui l'entoure, je dois tuer le serveur et le redémarrer.

Accordé, c'est juste un processus de 5 secondes, mais j'aime la commodité de Rails de simplement développer puis actualiser le navigateur. J'aimerais donc avoir cela aussi pour mes extraits de balisage.

Remarque: Le fait de coller «déchargeable» à l'intérieur du module auxiliaire ne fonctionne pas.

Répondre

0

Ce n'est pas une vraie solution mais vous pouvez utiliser des tests (TestUnit, RSpec ou autre) pour vous assurer que vos helpers fonctionnent comme prévu. De cette façon, vous ne compteriez pas tellement sur le rechargement automatique de vos aides.

1

Bonne question! C'est une technique que je devrais abuser plus fréquemment.

#I go in environment.db (presumably it will work in one of the per-environment files, too.) 
    Dependencies.explicitly_unloadable_constants << 'NameOfHelperToReloadHere' 

Ce tableau commence vide, incidemment, au moins dans mon installation. (Vérifié via la console.)

J'ai testé cela localement et cela fonctionne pour moi, au moins sur Rails 2.0.2. Le crédit majeur pour la solution appartient à this gentleman.

+0

Cela fonctionne! Merci pour le conseil :-) Notez que dans 2.1.1, l'utilisation de dépendances directement est obsolète et devrait être remplacé par ActiveSupport :: Dépendances – webmat

+0

Hmmm, j'ai parlé trop vite. Pour une raison quelconque, cela ne semble pas fonctionner avec des aides. Je vais continuer à creuser. – webmat

+0

Cet article se termine par le commentaire le plus étrange de tous :-) Regardez-le! – webmat

1

Si vous les collez dans application_helper.rb, ils seront chargés à chaque fois et disponibles pour toutes vos vues. Ceci est chargé chaque fois en mode développement (ou au moins je n'ai pas rencontré de problèmes).

Je vais généralement créer des petites aides que j'utilise sur l'ensemble du site (en-têtes de table triables par exemple) qui utilisent la même logique.

+0

Cela devrait être la bonne solution.Les assistants devraient être rechargés automatiquement sans aucun code supplémentaire, sauf si vous en avez besoin manuellement (ce que vous ne devriez jamais faire). –

1

Cela devrait recharger tous les assistants à chaque demande (en supposant que vous avez collé aux conventions de nommage par défaut)

#Put this in config/environments/development.rb 
ActiveSupport::Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize}) 

Ou si vous utilisez une ancienne version de Rails (2.0.2 ou plus tôt, je pense)

#Put this in config/environments/development.rb 
Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize}) 

Works pour moi dans RoR 2.1.1


Mise à jour: extrait de top modifié pour inclure 'ActiveSupport ::', doit avoir copié/collé de manière incorrecte à partir de mon code.

+0

J'ai essayé exactement cela. Il ne détecte toujours pas les nouvelles modifications apportées à un assistant entre les actualisations. Btw, vos deux extraits disent exactement la même chose ;-) – webmat

Questions connexes