Я вижу несколько проблем.
Первый такой:
@vouch = Vouch.last.vouched_user_nickname
Вы используете переменную с именем @vouch
для хранения псевдонима пользователя. Это противоречит здравому смыслу и сбивает с толку других людей, читающих ваш код (таких как я). Вместо этого используйте что-то вроде этого:
@vouch = Vouch.last #on the controller
@vouch.vouched_used_nickname #on the view
Это ... eum ... "экзотическое" соглашение об именах помогает запутать себя, когда вы пытаетесь сделать "множественный" пример:
@vouch = Vouch.find(:all,
:select => "vouched_user_nickname",
:group => 'vouched_user_nickname')
Функция findrecord (: all, ...) всегда возвращает массив объектов activerecord (или пустой массив). Вы, кажется, ожидаете массив строк. Вы всегда получите ваучеры, если сделаете Vouch.find.
Часть: select только ограничивает объем информации, которую имеют эти ваучеры (они приходят только с заполненным именем vouched_user_nickname. Остальная часть, включая их идентификатор, пуста, поскольку не считывается из базы данных).
Если вы хотите иметь массив псевдонимов пользователей, вы можете сделать это следующим образом:
# note the names. @vouchers in plural, and @nicknames for the user names
@vouchers = Vouch.find(:all, :select => "vouched_user_nickname",
:group => 'vouched_user_nickname')
@nicknames = @vouchers.collect{|v| v.vouched_user_nickname}