Utilice el método map
:
Devuelve una nueva matriz con los resultados de la ejecución del bloque una vez para cada elemento de la enumeración.
def recruits_names
self.referrals.map { |r| r.display_name }
end
[Actualización] Según lo indicado por Staelen en los comentarios, este ejemplo se puede acortar aún más a:
def recruits_names
self.referrals.map(&:display_name)
end
Para los curiosos, esto se debe a &
llamadas to_proc
en el objeto siguiente (cuando se utiliza en una llamada a un método), y Symbol
implementa to_proc
para devolver un Proc
que ejecuta el método indicado por el símbolo en cada valor cedido al bloque (ver the documentation).
también puede soltar el 'self'. Ya está implícito – edgerunner
Ruby es tan intuitivo que la respuesta ya está contenida en la pregunta :-) "Es más eficiente la forma Ruby de ** asignar ** atributo [...]" ¿No te encanta eso? –
¿Qué sucede si quiere devolver más de un atributo, pero no todos? – Steve