Оооо, теперь я понимаю. Извините за путаницу. Вот что я бы сделал:
В вашем контроллере:
@superlative_bodies = @profile.superlatives.map &:body
# Equivalent to: @superlative_bodies = @profile.superlatives.map {|sup| sup.body }
На ваш взгляд:
= @superlative_bodies.to_sentence
Некоторые люди вместо этого делают все это в представлении, которое зависит от вас:
= @profile.superlatives.map(&:body).to_sentence
Для объяснения, .map
- это супер-полезный метод Ruby, который принимает массив или другой Enumerable и блок и возвращает новый массив, где каждый элемент является соответствующим элементом из исходного массива после того, как блок был применен к нему. , Например:
[ 'foo', 'bar', 'baz' ].map {|word| word.upcase } # => [ 'FOO', 'BAR', 'BAZ' ]
# or
[ 'foo', 'bar', 'baz' ].map &:upcase # => [ 'FOO', 'BAR', 'BAZ' ]
(Последний является просто сокращенной версией первого, когда вы хотите вызывать один и тот же метод для каждого элемента.)