2009-05-24 6 views
2

il y a une ligne affichée dans les < pre>Pourquoi ce commentaire crée-t-il une erreur de compilation sur Ruby on Rails?

<%= h @stories.inspect %> 

et la sortie était trop long, donc je l'ai changé à

<%= #h @stories.inspect %> 

<% @stories.each do |s| %> 
    <%= h s.inspect %> 
<% end %> 

(en commentant la première ligne). maintenant le code ne parviendra pas à compiler ... en disant

erreur de compilation
/Users/winterheat/ror/shov2/app/views/stories/index.html.erb:13: erreur de syntaxe, kENSURE inattendue, expecting ') »
/Users/winterheat/ror/shov2/app/views/stories/index.html.erb:15: erreur de syntaxe, kend inattendue, expecting ')'

et si je supprimer cette ligne a commenté tout à fait, le code fonctionnera. Je pensais dans un livre, il est dit que vous pouvez commenter un code dans ERB comme ça?

Mise à jour: drôle si je change à

<% #h @stories.inspect %> 

il compilera bien ... si l'affichage de l'étiquette de résultat <% =%> n'aime pas les commentaires, il semble.

Répondre

6

Pensez <% = comme signifiant « ajouter la valeur de cette expression dans le flux de sortie ». Aucune expression? Erreur de syntaxe.

Tenir compte

output << @stories.inspect 

vs

output << 

Traquer comment <% = est vraiment traitée dans la source de erb peut être édifiant. J'ai trouvé que ça en valait la peine quand je commençais à utiliser Rails.

+0

mais si "hello" et puts peuvent être gérés sans erreur, pourquoi ne pas <% = # comment%>? –

+0

Parce que c'est un détail d'implémentation spécifique aux puts et n'a rien à voir avec ERB? – Chuck

3

<% = doit être suivi d'une expression Ruby et remplacé par le résultat.

aucune expression conduit à une erreur

1

utilisation

<% #h @stories.inspect %> 

au lieu de

<%= #h @stories.inspect %> 

parce

<%= (I expect something that I can convert to string) %> 
4

La façon de commenter une étiquette <%= %> dans Ruby/Rails est <%#= %> ... placer le signe de commentaire avant le signe égal. Alors tout va fonctionner comme un charme.