Ouverture de session

Commentaires récents

Syndication
Flux XML

Interprétation du code dans les if

Interprétation du code dans les if
Posté par Kobra le Dimanche, 20 Juillet, 2008 - 10:56pm. Débuter avec Rails

Bonjour à tous,

Je vous sollicite à nouveau car mes recherches ne me mènent nul part.

Mon problème se produit en prod et non en dev.

Pour faire simple, j'ai un if dans mon layout


<% if liste %>
<%= liste.titre %>

<% for item in liste.items %>
<%= item.titre %>
<% end %>
<% end %>

Bon, ce code est un peu francisé, et écrit de mémoire.
Les items sont affichés à l'aide d'un partiel.

Bien évidemment, si la liste n'existe pas, le code n'est pas à interprété sous peine d'avoir un message d'erreur "nil.titre n'existe pas".

En dev, tout s'exécute parfaitement. En revanche en prod, j'ai ce message d'erreur pour le titre de la liste, et un pour les items de la liste qui n'existent pas quand la liste n'existe pas (logique). J'ai l'impression que le serveur interprète tout le code avant de ne retourner uniquement ce qui doit être affiché.

Je ne sais pas où chercher, je ne sais pas d'où ça peut venir, et je ne sais pas comment y remédier "proprement".

Si quelqu'un a une idée...

Pour info :
Dev sous windows XP, avec instant rails (webrick & co)
Prod sous debian, avec apache & mongrel

Merci pour votre aide.

Florent



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
Merci à tous les deux! Je
Auteur: 
Kobra
Date: 
Ven, 25/07/2008 - 11:55

Merci à tous les deux! Je suis vraiment désolé, mais je n'ai pas eu le temps de faire les modifs plus tôt. Mais en suivant vos conseils, et en faisant quelques recherche voici concrètement ce qu'il se passait :
- Lorsque l'utilisateur décide d'afficher la liste, celle-ci est automatiquement créée. Sauf que suite à une faute de frappe, cette liste n'était plus enregistrée dans la BDD...
- Du coup, mon if vérifiait seulement si l'utilisateur voulait voir la liste, et non pas si celle-ci existait. Grosse bourde de ma part...
- J'ai donc rajouté la condition qui vérifie que la liste existe bien (même si c'est censé être le cas...) afin de ne plus avoir cette erreur (et hooo! miracle, ca marche!)
- J'en ai quand même profité pour suivre vos conseils en utilisant .each &Co

Un grand merci donc à tous les deux :D

Florent


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Personnellement, je
Auteur: 
sebalyans
Date: 
Mer, 23/07/2008 - 09:16

Personnellement, je vérifierai les données de ta base de prod parce que ce comportement n'est pas logique.

Ensuite, vérifie des pistes telles que le cache, que ce soit au niveau de rails ou de ton navigateur.

http://www.alyans.fr


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
each au lieu de for
Auteur: 
hery
Date: 
Lun, 21/07/2008 - 02:43

Bonsoir
Je te conseille d'utiliser, quand tu le peux, la méthode each au lieu de la boucle "for .. in ... do".

Ensuite lorsque la liste n'a pas d'items :
liste.items #=> nil

Donc cela engendre inévitablement une erreur, vu que tu utilises for avec un nil:NilClass

Peux-tu changer if liste en unless liste.blank? Ceci au cas où liste ne serait pas égal à nil ou false.

Je te propose une solution :

<% unless liste.blank? %>
<%= liste.titre %>
<% liste.items.each do |item| %>
<%= item.titre %>
<% end unless liste.items.blank? %>
<% end %>

Il faut remarquer ici que si items.blank? == true il faudra rajouter un test pour ce cas.

Il se peut aussi que ton liste.items contiennent des éléments nil
Exemple :
liste.items == [item1,nil,item2] et donc le deuxième élément de la liste provoque une erreur.

Pour cela il y a la méthode Array#compact.

Mais ce serait vraiment très étrange si c'est un has_many ou un habtm d'ActiveRecord::Base qui génère ce genre de liste.
Il faudrait vérifier dans ce cas ta base de production et voir ce qui ne va pas.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Qui est en ligne
Il y a actuellement 1 utilisateur et 32 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Propulsé par Drupal ]