Ruby enviar (attribute.to_sym) para el método Rails

Estoy usando Ruby 1.9.2 y necesito revisar todos los valores de una tabla para asegurarme de que todo esté en encoding UTF-8. Hay muchas columnas, así que esperaba poder utilizar el método column_names para recorrerlas todas y codificar los valores a UTF-8. Pensé que esto podría funcionar:

def self.make_utf for listing in Listing.all for column in Listing.column_names column_value_utf = listing.send(column.to_sym).encode('UTF-8') listing.send(column.to_sym) = column_value_utf end listing.save end return "Updated columns to UTF-8" end 

Pero devuelve un error:

 syntax error, unexpected '=', expecting keyword_end listing.send(column.to_sym) = column_value_utf 

No puedo averiguar cómo hacer que esto funcione correctamente.

Estás usando send mal y estás enviando el símbolo equivocado para lo que quieres hacer:

 listing.send(column + '=', column_value_utf) 

Estás tratando de llamar al método x= (para algunos x ) con column_value_utf como argumento, eso es lo que ox = column_value_utf haría normalmente. Por lo tanto, debe crear el nombre del método correcto (solo una cadena) y luego enviar los argumentos para ese método como argumentos para send .