2010-10-31 4 views
0

J'ai un bloc de ce code dans mon aide:Montrer emplacement mémoire au lieu de la valeur dans Rails

if !shop.directions.blank? 
    "<ul>".html_safe + 
     shop.directions.each do |direction| 
      "<li>#{direction.direction}</li>".html_safe 
     end + 
    "</ul>".html_safe 
else 
    "No directions available.".html_safe 
end + 

C'est montrant l'emplacement de mémoire de direction.direction comme

#<Direction:0xab3c6d0>#<Direction:0xa32c6d0> 

au lieu de la valeur de celui-ci comme

1. Take bus no. 3 
2. Take train towards Lydia Ave. 

Merci.

MISE À JOUR 1

Maintenant, je l'ai changé à ceci:

spot.directions.flatten.map do |direction| 
      "<li>".html_safe + direction.direction + "</li>".html_safe 
     end 

utilisant le flatten.map. Mais alors, il montre tout le code du navigateur:

<li>Take bus no. 3</li><li>Take train towards Lydia Ave.</li> 

Oui, y compris le <li><li>

Répondre

0

Cela ressemble à vous stockez un objet de direction (qui n'a pas une coutume to_s méthode) dans direction.direction, au lieu d'une chaîne. Essayez de sortir direction.direction.inspect pour avoir une meilleure idée de ce qui se passe. Gardez aussi à l'esprit que ruby-debug peut être un excellent outil pour déboguer en imprimant des valeurs. Je suppose, sans regarder le code, que vous pourriez avoir un tableau de tableaux d'objets direction, comme [[direction1],[direction2]] au lieu du tableau aplati que vous attendez [direction1, direction2].

Mise à jour: tableau # map retourne un autre tableau - ce que vous voulez faire est de construire une chaîne, pas retourner un tableau, alors pensez à la construction soit explicitement la chaîne, ou en appelant se joindre au réseau résultant.

+0

S'il vous plaît voir ma mise à jour. – Victor

+0

Merci les gars, je pense que c'est mieux pour moi d'oublier de le mettre en aide, mais dans la vue à la place. Sauver plus de problèmes. – Victor

0

Votre bloc semble être bien, avez-vous vérifier quel genre d'objet Direction#direction renvoie? Si elle renvoie un objet Direction, alors c'est exactement ce que vous obtiendriez.

Réponse à votre mise à jour: Toute chaîne combinée/reconstruite perd son statut "html safe", et elle est échappée en sortie. Vous devez appeler html_safe sur le résultat final, et à l'intérieur du bloc, échapper manuellement les chaînes risquées avec h(risky_part)

+0

S'il vous plaît voir ma mise à jour. – Victor

+0

S'il vous plaît voir 'ma' mise à jour. – edgerunner

+0

Je suis désolé, supprimer .html_safe ou l'ajouter ne résout pas le problème.

  • est toujours affiché dans la sortie. C'est comme un "pré" texte maintenant. – Victor

    Questions connexes