Forum: Rails-ES Imprimir con metodo each

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Valentin P. (Guest)
on 2009-03-19 13:09
(Received via mailing list)
Buenas a todos.

Tengo un pequeño lío y no encuentro la explicación (hoy andaré algo
espeso)

Esto funciona bien:
<% usuario.servicios.each { |servicio| %>
<%= servicio.nombre %>
<% } %>


Quiero hacer lo mismo pero en una linea (si se pudiera):
<%= usuario.servicios.each { |servicio| servicio.nombre } %>
<%= usuario.servicios.each { |servicio| "#{servicio.nombre} } %>
<% usuario.servicios.each { |servicio| print servicio.nombre } %>

Me devuelven un "#" en todos los casos. Supongo que será un Array.
¿Podría
hacerlo en una línea?


Saludos.
Albert C. (Guest)
on 2009-03-19 13:19
(Received via mailing list)
prueba de hacer <%= usuario.servicios.map{|servicio| servicio.nombre
}.join
%>

2009/3/19 Valentin P. <removed_email_address@domain.invalid>
Valentin P. (Guest)
on 2009-03-19 13:21
(Received via mailing list)
De esa manera es como lo tengo al final:
<%= usuario.servicios.map{|servicio| servicio.nombre }.join(", ") %>

Ya era por curiosidad con respecto al each.

2009/3/19 Albert C. <removed_email_address@domain.invalid>
Albert C. (Guest)
on 2009-03-19 13:44
(Received via mailing list)
El each devuelve el array original que has iterado, hagas lo que hagas
dentro. Por eso no te imprimia el resultado. Si a pesar de todo lo
quieres
hacer con each deberias hacer algo asi

<%= r=""; usuario.servicios.each{|servicio| r += servicio.nombre }; r %>

o si quieres tirar por inject (devuelve el acumulado):

<%= usuario.servicios.inject(""){|acc, servicio| acc + servicio.nombre
}; r
%>


Saludos.

2009/3/19 Valentin P. <removed_email_address@domain.invalid>
Emili P. (Guest)
on 2009-03-19 13:45
(Received via mailing list)
<% usuario.servicios.each { |servicio| puts "#{servicio.nombre}" } %>

2009/3/19 Valentin P. <removed_email_address@domain.invalid>
Albert C. (Guest)
on 2009-03-19 13:56
(Received via mailing list)
el puts no lo sacará por el log en lugar de la web?

2009/3/19 Emili Parreño <removed_email_address@domain.invalid>
Valentin P. (Guest)
on 2009-03-19 14:00
(Received via mailing list)
Emilio, ese caso que pones lo intenté también, pero no me funcionó.

2009/3/19 Emili Parreño <removed_email_address@domain.invalid>
Borja Martín (Guest)
on 2009-03-19 14:15
(Received via mailing list)
usa el método concat para sacar algo a la vista:

<% usuario.servicios.each { |servicio| concat(servicio.nombre) } %>

Saludos
Guillermo (Guest)
on 2009-03-19 14:24
(Received via mailing list)
2009/3/19 Valentin P. <removed_email_address@domain.invalid>

> Buenas a todos.
>
> Tengo un pequeño lío y no encuentro la explicación (hoy andaré algo espeso)



¿Has pensado en usar algún helper?

class MyHelper
  def show_user_services(user)
    user.servicios.map(&:nombre).to_sentence
  end
end

Y en la vista:
  <%= show_user_services(user) %>
Valentin P. (Guest)
on 2009-03-19 14:26
(Received via mailing list)
Me ha gustado esta idea, porque lo tengo que repetir en varios lugares.

Gracias.

2009/3/19 Guillermo <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.