2010-11-09 2 views

ответ

10

Проблема в том, что вы пытаетесь присоединиться к атрибуту объектов, а не к самим объектам. Собирать - это лучший способ, которым я это знаю. Но я хотел бы использовать to_sentence метод Rails предоставляет для преобразования массивов так же, как это:

Category.find(:all,:select => "name").collect { |c| c.name }.to_sentence 
+5

'Category.all (: выберите =>: имя) .map (&: имя) .to_sentence' –

+0

Еще лучше, Ларс! – jxpx777

+0

спасибо, ребята, это прекрасно. – csanz

3

Нет, ваше решение кажется совершенно нормально.

Вы можете только опустить круглые скобки до join.

+0

Я совершенно не знаком с Rails, поэтому придерживайтесь этого мнения с солью, но я думаю, что выбор между join и to_sentence зависит от варианта использования: последний кажется более ориентированным на потребительский дисплей, который может появиться (например, скажем) фактическое предложение. Поведение по умолчанию to_sentence (по крайней мере, это то, что я наблюдал) заключается в использовании запятых, за исключением последнего разделителя, где используется слово «и». Для моего варианта использования я кормлю скрипт, который ожидает запятые, а не «и». Итак, join ',' отлично работает. –

0

Array.pluck поместит его в массив строк для вас. Большая экономия не будет создавать объекты Ruby ActiveRecord, когда они вам не понадобятся.

Category.pluck(:name).join(", ") 
Category.pluck(:name).to_sentence 
Смежные вопросы