2 horas programando para 4 líneas
Es lo que tiene ruby.
Llevo un par de horas intentando sacar un Float en formato ‘d.ddd.ddd,dd’. Hay muchas cosas en internet para conseguirlo, pero no todas funcionaban bien, y otras funcionaban demasiado bien, con un montón de opciones.
El caso es que hay un helper del ActionView que tiene la función number_to_currency pero es un cabroncete de helper y no podía acceder desde el modelo. También teníamos la gema Currency pero era un pedazo monstruo para la tontada que yo quería.
Al final la gema Scruffy me ha dado la pista y esto es lo que tengo:
class Float def en_euros parts = sprintf("%01.#{2}f", self).split('.') parts[0].to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1.") + "," + parts[1].to_s end end
Es un parchecito del Float para poder hacer esto:
>> 1234.566.en_euros => "1.234,57"
Julio 23rd, 2008 at 3:09 am
No entendi porque no usabas directamente number_to_currency en la vista y listo…
Julio 23rd, 2008 at 12:56 pm
Porque me quedaba un churro como este:
En un montón de sitios.
Intenté wrappearlo en un método de mi application_helper tal que así:
Y funcionaba bien en las vistas, pero no en la plantilla del mail que también hace uso de este formato. :/
En el mail me decía:
Así que entre una cosa y otra me lancé a intentar que la manera fuera más al rollo que está ahora Float.en_euros .. me parece lo más elegante.
Saludos
f.
Julio 23rd, 2008 at 4:46 pm
Intenta colocando un
include ApplicationHelper
en tu clases Mailer. Deberia quedar algo por el estilo:
class Mailer < ActionMailer::Base
include ApplicationHelper
Ahi deberias poder usar tus helpers en las plantillas de emails.
Es elegante lo de Float.en_euros, pero en realidad creo que es mas una cuestion de vista, asi que usar el helper me parece mas elegante aun ;-)
Saludos!
Julio 23rd, 2008 at 5:45 pm
Estoy completamente de acuerdo contigo en que este asunto hay que resolverlo en la Vista. Es sólo que no me salía.
Estoy probando lo que me dices y con el include tal que ahí no me ha funcionado porque el método lo busca en el ActionView no en el ActionMailer.
Al final lo he podido resolver poniendo esto en el enviroment.rb:
Seguro que no es la mejor manera.
Gracias por picarme :P
f.
Julio 25th, 2008 at 4:44 pm
Mi profesor siempre dijo que los que programan menos líneas siempre que se cumpla la función requerida, son los mejores.
Julio 25th, 2008 at 7:42 pm
No estoy del todo de acuerdo contigo Agustín, yo creo que el código debe ser legible, comprensible y mantenible.
Hacerlo en el menor número de líneas es un ejercicio de competición que muchas veces se pelea con las características que he enumerado.
f.
Enero 29th, 2015 at 8:24 pm
Useful info. Lucky me I discovered your site by accident, and I am shocked why this coincidence
didn’t took place earlier! I bookmarked it.