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 :

passer des variables à partial


Sujet :

Ruby on Rails

  1. #1
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut passer des variables à partial
    Salut à tous!
    J'ai décidé de remplacer une de mes pages par un partial où je devrai passer normalement les variables initialisées dans mon controller (2 arrays). Donc j'ai fait dans ma page comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <h1>New Clinical Study</h1>
    <% form_for(@clinical_study) do |f| %>
      <%= render(:partial => 'clinical_study', :object => f, :locals => {:pack_studies => @pack_studies,
          :countries => @countries})%>
      <p>
        <%= submit_tag "Validate"%>
      </p>
    <%end%>
    Mon partial est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <%= clinical_study.error_messages %>
    <p>
      <%= clinical_study.label :reference %><br />
      <%= clinical_study.text_field :reference %>
    </p>
    <% pack_studies.each do |pack_study| %>
      <%= hidden_field_tag 'stab_study_ids[]', pack_study.stab_study_id %>
    <%end%>  
     
    <div class="prd_select">
      <%= select_tag("select_from",
        options_for_select(countries, clinical_study.countries.collect { |country| country.id}),
        {:multiple=>true, :size=>6})%>
      <a href="#" id="add">Add >></a>
    </div>
    <div class ="prd_select">
      <%= select_tag("select_to", options_for_select([]), {:multiple=>true, :size=>6})%>
      <a href="#" id="remove"><< Remove</a>
    </div>
    Et dans le copntroller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     def new    
        @clinical_study = ClinicalStudy.new        
        @pack_studies = PackStudy.find_all_by_stab_study_id(params[:stab_study_ids]) if params[:stab_study_ids]
     
        respond_to do |format|
          format.html #new.html.erb
          format.xml  { render :xml => @clinical_study }
        end
      end
    Quand je l'execute, j'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    undefined method `countries' for #<ActionView::Helpers::FormBuilder:0x4842e30>
     
    Extracted source (around line #12):
     
    9: 
    10: <div class="prd_select">
    11:   <%= select_tag("select_from",
    12:     options_for_select(countries, clinical_study.countries.collect { |country| country.id}),
    13:     {:multiple=>true, :size=>6})%>
    14:   <a href="#" id="add">Add >></a>
    15: </div>
    Bien sur je load mes 'countries avant dans le controler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    before_filter :load_countries
     private
      def load_countries
        @countries = Country.find(:all).collect { |country| [country.country_name, country.id] }
      end
    Avant l'implémentation de partial tout fonctionnait.
    Qu'est-ce qui n'est pas correct ici????Merci

  2. #2
    Membre éclairé

    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
    Points : 652
    Points
    652
    Par défaut
    :object => f
    Il me semble...

  3. #3
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Donc j'ai remplacé le code dans la page html comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <h1>Editing Clinical Study</h1>
     
    <% form_for(@clinical_study) do |f| %>
      <%= f.error_messages %>
      <%= render(:partial => "clinical_study",
        :locals => {:countries => @countries, :pack_studies => @pack_studies}) %>
     
      <%= f.submit "Update" %>
    <% end %>
     
    <%= link_to 'Show', @clinical_study %> |
    <%= link_to 'Back', clinical_studies_path %>
    Mon partial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <p>
      <%= clinical_study.label :reference %><br />
      <%= clinical_study.text_field :reference %>
    </p>
    <% pack_studies.each do |pack_study| %>
      <%= hidden_field_tag 'stab_study_ids[]', pack_study.stab_study_id %>
    <%end%>  
     
    <div class="prd_select">
      <%= select_tag("select_from",
        options_for_select(countries, clinical_study.countries.collect { |country| country.id}),
        {:multiple=>true, :size=>6})%>
      <a href="#" id="add">Add >></a>
    </div>
    <div class ="prd_select">
      <%= select_tag("select_to", options_for_select([]), {:multiple=>true, :size=>6})%>
      <a href="#" id="remove"><< Remove</a>
    </div>
    Maintenant il ne reconnait plus la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%= clinical_study.label :reference %><br />
    en affichant l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    undefined method `label' for #<ClinicalStudy:0x46ffce4>
    Une idée?

  4. #4
    Membre éclairé

    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
    Points : 652
    Points
    652
    Par défaut
    Là pour le coup, il faut peut etre lui passer @clinical_study avec :object =>
    Mais je ne suis pas du tout sûr.
    C'est plutot compliqué ton truc, on ne sais pas trop comment c'est modélisé.
    Tu devrais commencer par faire la manip avec un model simple, pour arriver à quelquechose qui marche...
    Perso, quand je fais un form avec :
    <% form_for(@clinical_study) do |f| %>
    lorsque j'appelle le partial, je passe les locals comme ça :
    :locals => { :f => f }
    Dans ton cas, c'est plus compliqué, et il me semble que Rails ne fait pas le rapport entre la variable d'instance @clinical_study et la variable locale du partial clinical_study
    En théorie, dans le partial, tu devrais avoir un f.label et non pas un clinical_study.label...
    Mais encore une fois, ton exemple est trés particulier.

  5. #5
    Membre averti Avatar de Javix
    Inscrit en
    Juin 2007
    Messages
    531
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 531
    Points : 353
    Points
    353
    Par défaut
    Bon pour l'instant je vais le laisser tel quel, après on verra.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer des variables d'un dialog à un Doc
    Par thomfort dans le forum MFC
    Réponses: 16
    Dernier message: 03/05/2006, 06h39
  2. Réponses: 6
    Dernier message: 19/12/2005, 13h41
  3. Réponses: 11
    Dernier message: 09/12/2005, 14h59
  4. [C#][XSLT] Passer des variables
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/09/2005, 14h26
  5. Réponses: 3
    Dernier message: 03/02/2005, 13h07

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