IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Render_to_string dans un model


Sujet :

Ruby on Rails

  1. #1
    Membre expérimenté Avatar de rivsc
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 213
    Par défaut Render_to_string dans un model
    Bonjour,

    Je souhaiterai faire un render_to_string dans mon model (car utilisable à différent endroit dans le code pour chaque instance de mon model)

    J'ai essayé ceci trouvé sur internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    av = ActionView::Base.new(Rails::Configuration.new.view_path)
    av.render_to_string...
    Sinon j'ai passé mon controller en parametre à la méthode de mon model.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    methode(self)
     
    ------
     
    def methode(context)
      context.render_to_string...
    end
    J'ai cette erreur :

    protected method `render_to_string' called for

    Savez-vous comment contourner le problème ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    utilisable à différent endroit dans le code pour chaque instance de mon model
    Rajoute tes méthodes dans le repertoire lib et un require dans environment.rb

  3. #3
    Membre expérimenté Avatar de rivsc
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 213
    Par défaut
    Bon j'ai essayé et persisté, sans aboutissement. Du coup j'ai fait un modèle qui génère mon pdf en fonction des données (ok c'est pas top MVC mais bon... au moins c'est DRY :-p )

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Du coup j'ai fait un modèle qui génère mon pdf en fonction des données
    Ah ?
    Il faudrait que tu expliques un peu mieux ce que tu cherches à faire.
    En ce moment je travaille sur la génération de pdf aussi, et ça se trouve, on cherche la meme chose...

  5. #5
    Membre expérimenté Avatar de rivsc
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 213
    Par défaut
    Et bien je souhaitais générer un pdf (fortement lié à mon modèle)

    Exemple :
    Modèle facture <-> facture pdf

    J'ai besoin de générer mon pdf à différents endroits dans mes controlleurs.
    Etant donné que le pdf à un rapport évident avec mon modèle je trouve ça normal que le code se trouve dedans (pouvoir faire @bill.generate_pdf_bill qui créer le pdf et renvoie le chemin par exemple). Cependant je voulais que ma vue soit tout de même séparer des données. (d'où l'utilisation d'un render_to_string dans la méthode du modèle qui à pour but de générer le pdf).

    Ca c'était la théorie, en pratique j'ai fait un modèle generate_pdf dans lequel chaque méthode genere un pdf en fonction du besoin (chaque méthode contient les données et le contenu de la vue : du code prawn pour le pdf en ce qui me concerne).

    Du coup le code est accessible partout :
    GeneratePdf.generate_pdf_bill(:bill_id)

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Hello rivsc,

    Ca a l'air interessant comme approche, en utilisant le modele.
    J'ai pas encore essayé comme ça !
    Je ne comprends pas tout notamment quand tu dis :
    Etant donné que le pdf à un rapport évident avec mon modèle je trouve ça normal que le code se trouve dedans
    et apres :
    en pratique j'ai fait un modèle generate_pdf
    Finalement tu fais un modele à part...
    Mais je vois l'idée.

    Autrement j'explique là où je bloque :
    J'ai une page html à l'écran, et je fais "fichier" + "imprimer" + "dans un pdf" ---> Ca génére un pdf tout propre, tout nikel, alors que j'ai rien codé dans ce sens.
    Alors pourquoi faire en sorte que ce soit le serveur qui génère le pdf ?
    Génerer le html, c'est déja pas mal...non ?
    Pour le faire coté serveur, ça oblige à dupliquer la vue, et dans mon cas, la vue, elle fait plusieurs milliers de lignes, donc c'est hors de question.
    Si on veut avoir une copie de sauvegarde du fichier généré, coté serveur ?
    Il suffit de sauvegarder non pas un pdf, mais un fichier html, avec le fameux render...
    Ensuite, si l'utilisateur veut un pdf, meme technique, il clique sur le fichier html, et il fait "imprimer"...

    Je raconte tout ça, c'est rapport au render, d'une part, et l'endroit où mettre le code (vue, controleur, model,...)
    L'idéal serait de pouvoir faire un render_to_pdf directement depuis la vue html, en tenant compte du css de l'impression.
    Et je n'ai pas trouvé...

  7. #7
    Membre expérimenté Avatar de rivsc
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 213
    Par défaut
    J'ai une page html à l'écran, et je fais "fichier" + "imprimer" + "dans un pdf" ---> Ca génére un pdf tout propre, tout nikel, alors que j'ai rien codé dans ce sens.
    Pour d'autre pdf j'y avais pensé, mais le rendu diffère suivant le navigateur, et puis de toutes façons :

    Si on veut avoir une copie de sauvegarde du fichier généré, coté serveur ?
    C'est tout à fait la raison pour laquelle je veux les générer par le serveur (et aussi pour pouvoir les envoyer par mail).

    Tu utilises Prawn ? Si oui je pense que la solution que j'ai retenu est la plus simple à mettre en place sans dupliquer son code.

    Si tu trouves une autre solution, n'hésite pas...

Discussions similaires

  1. [Zend_Db] Probleme dans mon model
    Par figatelliSTI dans le forum Zend_Db
    Réponses: 2
    Dernier message: 20/03/2008, 11h32
  2. Réponses: 5
    Dernier message: 01/10/2007, 13h05
  3. Réponses: 7
    Dernier message: 24/08/2007, 15h21
  4. Réponses: 1
    Dernier message: 23/04/2007, 14h04
  5. [Dreamweaver] Insertion de code php dans un modèle
    Par Nourr dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 03/05/2006, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo