qc_parts.map!{|a| a.id}.join(",")
будет возвращать строку, но не будет помещать это значение в переменную qc_parts
. Для этого вам нужно сделать
qc_parts = qc_parts.map{|a| a.id}.join(",")
Если я неправильно понял, и вы на самом деле видите, как метод join
возвращает массив, тогда происходит нечто странное.