2009-10-23 9 views
1

J'ai cherché une solution à cette question au cours des derniers jours. Il est un ennui simple, mais je déteste ne pas savoir comment faire les choses ...Comment sortir du texte en rthml sans <%=variable%>

Environnement: Ruby, Rails, RHTML

Le problème: Quand j'itérer une collection en RHTML je voudrais réduire le nombre de <%%> et <% =%> tags que j'utilise. Ce qui suit semble pléthorique:

Example

<% @products.each do |p| %> 
    <%= @p.name %> 
<% end %> 

EDIT: comment puis-je exclure <% =%> à l'intérieur d'un bloc?

Je préférerais faire:

<% @products.each do |p| 
    puts @p.name 
end %> 

Certaines situations pourraient permettre l'utilisation d'une ou l'autre ... Cependant, je sais que je pouvais faire avec jsp:

<% for(int i=0; i<10;i++){ 
    System.out.print(i); 
} %> 

Merci à l'avance pour votre contribution.

+0

Quelle est votre question ...? –

+1

La question est de savoir comment exclure <%= %> à l'intérieur d'un bloc – Chadwick

Répondre

2
<% @products.each do |p| 
    _erbout << @p.name 
end %> 

_erbout est le nom par défaut de la variable ERB (la classe qui est votre modèle .rhtml analyse syntaxique) utilise pour construire sa sortie. C'est assez moche, et ça me semble un peu bizarre, mais ça fonctionne.

+0

Merci pour l'aide. Malheureusement, cela n'a pas fonctionné; il semble que la variable _erbout n'est pas disponible. Erreur: variable locale définie ou méthode '_erbout » pour # Chadwick

0

Utiliser l'impression à la place de mettre.

0

Plusieurs autres possibilités, en fonction du contexte, si votre code de vue semble trop lourd:

  • Utilisez partials. Par exemple:

dans votre fichier principal:

<%= render(:partial => "product", :collection => products) %> 

et dans la partie, il suffit d'utiliser:

<%= product.name %> 

Maintenant cela semble parvins pour un exemple simple comme cela, mais en supposant quelque chose de plus complexe, il fait abstraction de la boucle et rend le code plus clair.

  • Utiliser des méthodes d'aide
0

Vous pouvez également essayer d'utiliser quelque chose comme haml pour nettoyer les modèles (avec des aides et). Partials

5

si vous voulez être moins bavard à regarder haml, avec votre exemple, il sera:

- @products.each do |p| 
    = @p.name 
+2

+1 sur l'utilisation Haml. Il faut d'abord s'y habituer, mais après je vous promets de ne pas regarder en arrière. Vos modèles finissent par être beaucoup moins bruyant. –

0

Vous allez devoir utiliser un <% = l'intérieur d'un tel bloc.Vous pouvez obtenir la lisibilité que vous voulez en utilisant un <% = avec un bloc:

<%= @products.map do |p| 
     p.name 
    end.join("\n") %> 
Questions connexes