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.