Organisation fichiers dans Rails!

Bonjour à tous !

Alors voilà, je suis en train de développer un ensemble d’éléments
pour intégrer des fonctions de recherches dans mon application.
Dans cet ensemble j’ai :

  • des partiels (pour l’instant je les ais mis dans /views/search/
    _NOM_DU_PARTIEL) -> me servent à afficher les différents types de
    champs pour la recherche
  • des fontions ( post_to_hash, hash_to_sql…) qui sont pour
    l’instant dans application controller.
    En effet j’ai besoin d’appeler ces fonctions depuis mes controlleurs,
    où je réceptionne les params de la recherche qui sont postés,
    transforme ca en requete SQL, exécute la requête et finalement affiche
    le résultat. Seulement je trouve ca un peu moche d’avoir toutes ces
    fonctions ( il y en a une petite dizaine) qui polluent mon
    application_controller, d’autant plus qu’elles n’ont rien à voir avec
    à proprement parler des “actions”, ces fonctions servent juste à
    retourner un élément à partir d’un autre (hash -> string…) et je ne
    sais pas où je peux les déplacer. En premier lieu j’avais pensé à un
    Helper ( mais les helper ne sont pas fait pour ca -> pas accessible
    depuis les controlleurs ) alors je m’interroge !?
    J’ai pensé à un module, parce ce que je développe est ni plus ni moins
    qu’un module de recherche mais je ne sais pas, où placer un module
    dans la hiérarchie des répertoires rails ? comment inclure un module
    dans un controlleur ?

Voilà, si jamais vous avez des conseils, ils sont les bienvenus ! Je
ne pense pas que je doive déplacer mes partiels mais si vous estimez
que ca puisse être plus propre j’écoute !

Merci

adrien

Tu peux créer ton module de fonctions et le placer dans
config/initializers/mon_module.rb

Il sera chargé au lancement.

Les fonctions seront vues des controlleurs et des views

Merci, je vais donc faire ca mais cela me pose 2 problèmes :

Premièrement : le fichier est chargé au démarrage et je dois relancer
le serveur à chaque fois que je veux en prendre en compte les mises à
jour ? Est-ce possible de changer ce comportement ? Sinon, il m’est
impossible de développer en devant relancer le serveur à chaque
modification !

Deuxièmement : pour que l’ensemble de mes fonctions soient bien
chargées, je ne peux pas les placer dans un module : si j’ajoute
“module search […] end” à mon fichier, les fonctions ne sont plus
chargées au démarrage ? cela n’est pas très grave mais je trouverai
plus propre d’encapsuler mes fonctions dans un module, y a-t-il une
solution ?

Merci !

adrien

On Oct 22, 11:20 am, Mathieu C.

Salut,

Premièrement : le fichier est chargé au démarrage et je dois relancer
le serveur à chaque fois que je veux en prendre en compte les mises à
jour ? Est-ce possible de changer ce comportement ? Sinon, il m’est
impossible de développer en devant relancer le serveur à chaque
modification !

Une piste, certes bourrine : En environnement de dev tu fais un
require “#{RAILS_ROOT}/config/initializers/mon_module.rb”

Mathieu C. wrote:

Salut,

Premi�rement : le fichier est charg� au d�marrage et je dois relancer
le serveur � chaque fois que je veux en prendre en compte les mises �
jour ? Est-ce possible de changer ce comportement ? Sinon, il m’est
impossible de d�velopper en devant relancer le serveur � chaque
modification !

Une piste, certes bourrine : En environnement de dev tu fais un
require “#{RAILS_ROOT}/config/initializers/mon_module.rb”

Et pourquoi ne pas tout simplement placer ce module dans “lib”?

Un simple require MonModule suffit alors dans le controleur

J’ai finalement trouvé la solution :

  • mettre le module dans /lib/search_module.rb , le nom de mon module
    est SearchModule, ainsi rails le charge à chaque démarrage

  • pour que rails recharge automatiquement le fichier dans
    l’environement de développement (évite d’arreter/relancer le serveur à
    chaque modification), ajouter cette ligne à config/environments/
    development.rb

ActiveSupport::Dependencies.explicitly_unloadable_constants =
‘SearchModule’

Merci pour vos réponses !

Adrien