2016-03-25 13 views
0

Sadece bir satır kullanarak ruby'de aşağıdaki kodu yapmak için bir yol gibi hissediyorum. Herhangi bir katılımcı var mı?Nesnede yineleme ve bir öznitelikteki özniteliklerinden birine katılma

arr = [] 
sample_object.all.each { |o| arr << o.id } 
arr.join(', ') 

Bu '' gibi bu nesne tarafından katılmak için kimliği yılların bir dize döndürür:

"1, 2, 4, 5, 6, 8, 9" 
+1

'simple_object.all.map (&: id) .join (',')' – vee

cevap

2

Sen basit bir yolu var sağ ediyoruz; map veya collect kullanın. Örnek kullanılarak collect:

sample_object.all.collect(&:id).join(', '); 

Referans: Enumerable Ben sadece bariz bir rakip olacağını nesnelerin kimliklerini istiyorsanız pluck hiçbir söz, görmek şaşırttı

+0

Teşekkürler! Harita ile arasındaki fark nedir? – Breno

+0

@Breno, fark yok, ya da kullanın. Başvurulan belgelere bakınız. – vee

2

arr inşa etmek gerek yoktur İlk olarak, sadece yazabilirsiniz

sample_object.all.map { |o| o.id }.join(', ')

map, sample_object s dizisini id s tarafından döndürülmesini sağlar. blok.

Biz ayrıca to_proc kullanarak bu kolaylaştırabilirsiniz:

sample_object.all.map(&:id).join(', ')