文字列にアイテムを変換する範囲検査+任意のブロックとバージョン:
def enumerate_as_text(seq, max, &block)
text = seq.first(max).map { |itm|
block_given? ? yield(itm) : itm.to_s
}.join(", ")
text += ", and #{seq.length - max} more" if max < seq.length
text
end
試運転:
blob = %w{a b c d e f g h i j}
puts blob.length
puts blob.join(", ")
puts enumerate_as_text(blob, 1)
puts enumerate_as_text(blob, 4)
puts enumerate_as_text(blob, 9)
puts enumerate_as_text(blob, 10)
puts enumerate_as_text(blob, 11)
puts enumerate_as_text(blob, 20) { |itm| "itm: #{itm}" }
出力:
10
a, b, c, d, e, f, g, h, i, j
a, and 9 more
a, b, c, d, and 6 more
a, b, c, d, e, f, g, h, i, and 1 more
a, b, c, d, e, f, g, h, i, j
a, b, c, d, e, f, g, h, i, j
itm: a, itm: b, itm: c, itm: d, itm: e, itm: f, itm: g, itm: h, itm: i, itm: j
それは質問に答えることができません:彼は自動的にどのように団体を得ることができましたか? – apneadiving
答えの一部は 'reflect_on_all_associations'を使うべきだったはずです – apneadiving