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 :

Configurations des routes


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 Configurations des routes
    Salut à tous !

    J'ai un problème pour appeler ma méthode 'rechercher' à partir d'une vue. Rien ne se passe quand je clique sur le bouton de recherche. Pourtant quand j'affiche les routes de l'appli, l'url est là. Voici ce que j'ai dans mon fichier routes.rb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    map.connect 'clinical_studies/search' ,
        :conditions => { :method => :get },
        :controller => "clinical_studies" ,
        :action => "search"
     
    map.resources :clinical_studies do |clinical_study|
        clinical_study.resources :clinical_study_countries    
      end
    dans ma page de recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      <% form_tag :action => 'search' do %>
          <%= label_tag 'Stability Study search criteria:' %><br/>
          <%= select_tag(:criteria,
            options_for_select(ClinicalStudy::load_search_criterias,
              params[:criteria])) %><br/>
          <%= label_tag 'Key word:' %><br/>
          <%= text_field_tag :value_to_match, 'Enter your search value here', :size =>80 %>
        <% end %>
      </fieldset>
      <%= submit_tag "Search ..."%>
    dans le controlleur 'clinical_studies_controller':
    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
    21
    22
    23
     
    def search
        @criteria = params[:criteria]
        @results = []
        case @criteria
        when ClinicalStudy.load_search_criterias[0]      
          #search by Pack Code
          prd_packs = PrdPack.find_by_contents(params[:value_to_match])
          redirect_to_index if prd_packs.blank?
          prd_packs.each do |item|
            pack_study = PackStudy.find_all_by_prd_pack_id(item.id)
            @results << pack_study unless pack_study.nil?
          end      
        when ClinicalStudy.load_search_criterias[1]
          #search by Product Name
        when ClinicalStudy.load_search_criterias[2]
          #search by Strength
        end
        respond_to do |format|
          format.html # search.html.erb
          format.xml { render :xml => @results }
        end
      end
    Quelqu'un pourrais me dire où se trouve mon erreur??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
    Ca a l'air pas mal ton truc, il y a juste un truc qui me chiffone c'est :
    :conditions => { :method => :get },
    Or tu saisis ce que tu cherches dans un formulaire (form_tag) la requete va partir en POST.
    Dans le routage, tu indiques comme condition que la requete arrive en GET.
    J'ai tendance à dire que ton probleme est là.
    Peut etre en lui spécifiant :method => :get dans ton form_tag

    Sinon, regarde les logs. Meme si quand tu cliques ça fait rien, il doit y avoir une requete qui part au serveur, et ça serait interessant de voir le détail. Déja regarder si ça part bien en POST, et aussi si les params sont bien les bons.

  3. #3
    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
    Autrement, pour info, tu peux mettre ta méthode search dans le modele, pour éviter de déclarer une action supplémentaire, non Restful.
    Dans ce cas, utiliser l'action index pour afficher les résultats de recherche.

  4. #4
    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
    J'ai modifié le fichier 'routes.rb en modifiant conditions to 'post':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     map.connect 'clinical_studies/search' ,
        :conditions => { :method => :post },
        :controller => "clinical_studies" ,
        :action => "search"
    mais mon fameux bouton 'Search' ne fait toujours rien...

  5. #5
    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
    Essaye de metre juste ça pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map.connect ':controller/:action'
    Et dis nous ce qu'il y a dans les logs

    Edit : Et surtout relance le serveur !!!! (modif des routes = relancer le serveur)

  6. #6
    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 dans le fichier 'routes.rb':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     map.connect ':controller/:action'
    Dans le development.log:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Processing ClinicalStudiesController#index (for 127.0.0.1 at 2008-12-16 14:03:52) [GET]
      SQL (0.0ms)   SET NAMES 'utf8'
      SQL (0.0ms)   SET SQL_AUTO_IS_NULL=0
      Country Load (0.0ms)   SELECT * FROM `countries` 
      Country Columns (0.0ms)   SHOW FIELDS FROM `countries`
      ClinicalStudy Load (0.0ms)   SELECT * FROM `clinical_studies` 
    Rendering template within layouts/ucb_stability
    Rendering clinical_studies/index
    Completed in 47ms (View: 16, DB: 0) | 200 OK [http://localhost/clinical_studies]

  7. #7
    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
    Merci pour les logs
    Normal que Rails charge la page index, aprés la recherche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    respond_to do |format|
          format.html # search.html.erb
    end

  8. #8
    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
    Non. En fait, la page 'index' devrait afficher une liste des études cliniques.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <% if (@clinical_studies.empty?) %>
      <h1>No Clinical studies found</h1>
      <fieldset>
        <% form_tag :action => 'search' do %>
          <%= label_tag 'Stability Study search criteria:' %><br/>
          <%= select_tag(:criteria,
            options_for_select(ClinicalStudy::load_search_criterias,
              params[:criteria])) %><br/>
          <%= label_tag 'Key word:' %><br/>
          <%= text_field_tag :value_to_match, 'Enter your search value here', :size =>80 %>
        <% end %>
      </fieldset>
      <%= submit_tag "Search ..."%>
     
    <% else %>
      <h1>Listing Clinical Studies</h1>
      <table>
        <tr>
          <th>Reference</th>
          <th>Country</th>
          <th>Created</th>
        </tr>
     
        <% for clinical_study in @clinical_studies %>
          <tr>
            <td><%=h clinical_study.reference %></td>
            <td><%=h clinical_study.country.country_name %></td>
            <td><%=h clinical_study.created_at %></td>
            <td><%= link_to 'Show', clinical_study %></td>
            <td><%= link_to 'Edit', edit_clinical_study_path(clinical_study) %></td>
            <td><%= link_to 'Destroy', clinical_study, :confirm => 'Are you sure?', :method => :delete %></td>
          </tr>
        <% end %>
      </table>
    <% end %>
    S'il n'y en a pas, j'affiche un formulaire de recherche des études de stabilité dans lesquels peuvent figurer les produits en question. Et c'est à partir de cette page [index] que je vais poster les critères de recherches soit par code de produit soit pat son nom, etc. que l'on peut choisir dans une drop-down list.
    Les résultats de recherches devraient être affichés dans la page 'search'(pas encore terminée):
    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
     
    <% @title = "Search Results: #{h @criteria}"%>
    <p>
      Your search matched <%= @results.size %>
      <%= pluralize @results.size, "stability study" %>
    </p>
    <% @results.each do |stab_study| %>
      <div id="search_<%= stab_study.id%> ">
        <% text = stab_study.highlight @criteria, :field => 'pack_study.prd_pack.pack_code',
          :pre_tag => "<strong> ", :post_tag => "</strong>"%>
        <%= link_to text, stab_study %>
        < /div >
        < div >
        <%= stab_study.highlight @criteria, :field => 'pack_study.prd_pack.pack_code',
          :pre_tag => "<strong>", :post_tag => "< strong>"%>
      </div>
      < br/ >
    <%end%>

  9. #9
    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
    Pas d'erreur dans les logs...La recherche se fait bien...
    Tu demandes à Rails d'afficher "index", il le fait...
    Pour l'instant, il n'y a pas de probleme.

  10. #10
    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
    Sauf rien ne se passe quand je clique sur le bouton de recherche. je reste toujours sur la page 'index'..

  11. #11
    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
    WAOU j'abandonne là.
    C'est TOI qui demande "index"
    Tu demandes "index" tu reçois "index", il est où le probleme ?

    Les résultats de recherches devraient être affichés dans la page 'search'(pas encore terminée):

  12. #12
    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
    Citation Envoyé par Zfred Voir le message
    WAOU j'abandonne là.
    C'est TOI qui demande "index"
    Tu demandes "index" tu reçois "index", il est où le probleme ?
    Attends un peu, là je ne comprends plus rien. C'est où que je demande 'index'?
    Sur la page de recherche j'appel la méthode 'search'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     <% form_tag :action => 'search' do %>
    ...
    Et dans la méthode 'search' du controlleur comme rien n'est précisé comme template, normalement Rails va chercher le template sous le même nom que l'action , c'est à dire 'search'. Est-ce que c'est correct ou non?

  13. #13
    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
    Et dans la méthode 'search' du controlleur comme rien n'est précisé comme template, normalement Rails va chercher le template sous le même nom que l'action , c'est à dire 'search'. Est-ce que c'est correct ou non?
    Oui

    C'est pas trés clair ton truc, tu utilises des méthodes qui ne sont pas natives Rails, tu as surement dû installer des plugins dont tu ne parles pas ici.
    Ducoup pour t'aider sans avoir tous les éléments c'est pas trés facile.
    Pour cette raison que je t'ai demandé les logs.
    Or dans tes logs, ce qu'on voit, c'est que tu demandes "index" et qu'il n'y a pas d'erreur...
    La prochaine étape pour débugguer ce genre de probleme, c'est d'ouvrir une console, et de taper les commandes 1 par 1 pour tracer les objects, si ils existent et ce qu'ils contiennent.
    Je ne serais pas étonné que ton object prd_packs soit vide et que c'est le redirect_to_index qui te renvoit vers "index"
    C'est où que je demande 'index'?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    redirect_to_index if prd_packs.blank?
    Essaye de commencer par commenter cette ligne pour voir si c'est le cas...

  14. #14
    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
    Ça y est! J'ai résolu le problème. Dans 'routes.rb' j'ai ajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     map.resources :clinical_studies, :collection => {:search => :get} do |clinical_study|
        clinical_study.resources :clinical_study_countries
      end
    Dans le controller la méthode 'search' reste telle qu'elle était défini.
    Dans la page index click sur 'new' nous ramène à la page 'new':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <% form_tag :action => "search", :method => :get do %>
      <fieldset>
        <%= label_tag 'Stability Study search criteria:' %><br/>
        <%= select_tag(:criteria,
          options_for_select(ClinicalStudy::load_search_criterias,
            params[:criteria])) %><br/>
        <%= label_tag 'Key word:' %><br/>
        <%= text_field_tag :value_to_match, 'Enter your search value here', :size =>80 %>
      </fieldset>
      <%= submit_tag "Search ..."%>
    <% end %>
    <%= link_to 'Back', clinical_studies_path %>
    Et voilà, ça fonctionne. Merci pour le feedback, - cela m'a poussé vers la la bonne solution!
    Un autre truc à refaire peut être, - trouver une façon d'utiliser Ferret pour une recherche sur plusieurs tables pour remplacer mes 'find_by_sql' méthodes.

  15. #15
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    map.resources :clinical_studies do |clinical_study|
        clinical_study.resources :clinical_study_countries    
      end
    =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map.resources :clinical_studies, :has_many => :clinical_study_countries

  16. #16
    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
    OK, merci c'est toujours bon a apprendre d'autres façons à faire la même chose. Bonne Fêtes de fin d'année à tous !!!!

  17. #17
    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
    c'est toujours bon a apprendre d'autres façons à faire la même chose
    Surtout quand c'est plus court, plus lisible et plus conventionnel
    Bonne fetes à toi aussi

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

Discussions similaires

  1. acts_as_tree et configuration des routes
    Par Javix dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 10/02/2009, 14h14
  2. [ZF 1.5] [Route] Besoin d'aide pour la configuration des mes routes => url propre
    Par Jonathan.b dans le forum Zend Framework
    Réponses: 5
    Dernier message: 29/10/2008, 15h27
  3. Configuration des routes
    Par jokobbb dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 21/04/2006, 13h11
  4. Configuration des disques sur un serveur pour Oracle
    Par hkhan dans le forum Administration
    Réponses: 5
    Dernier message: 29/09/2004, 13h57
  5. [JBUILDER 9][configuration des serveurs]
    Par bozo dans le forum JBuilder
    Réponses: 4
    Dernier message: 19/08/2003, 10h21

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