2011-11-20 11 views
6

Necesito usar un porcentaje en mi aplicación Rails. En cualquier vista, incluso cuando el usuario la ingrese, el formato deberá ser el formato de cientos, 100.000. Cuando se utiliza en los cálculos, debe representarse en el formato de centésimas, 1.00000.Almacenar un porcentaje en Rails + MySQL

Mi migración (que estoy añadiendo la columna a una tabla existente) tiene la siguiente línea: formato

add_column :worker, :cash_split, :decimal, :precision => 6, :scale => 5 

Así, a partir de ahora, estoy almacenándolo en las centésimas (1.00000). Mi base para elegir almacenarlo en este formato es que supongo que significará una lógica de negocios más limpia (es decir, no hay un código worker.cash_split/100.0.to_d pendiente) cuando deba multiplicar.

Mi único otro pensamiento fue quizás abusar del método de la compilación_of. Podría almacenar los datos en el formato de cientos (100.000) como cash_split y luego hacer un atributo de acceso cash_split_percentage que devuelve cash_split en su contraparte de formato 1.0000.

Respuesta

5

Su primer pensamiento es el correcto ... no lo piense demasiado.

Definitivamente debe almacenar números de porcentaje en la base de datos en formato de centésimas. Y usa ese formato en todos tus cálculos de Ruby.

Las cifras de porcentaje son un pantalla convención. Por ejemplo, el número 0.45 se muestra como el 45%. Como tal, utilice un ayudante de View para convertir sus porcentajes de su formato interno (números decimales) a su formato de visualización elegido, una cadena que incluye el signo%.

+2

¿Cómo manejaría los porcentajes en los formularios? Los usuarios querrán ingresarlo como un 45% pero se debe almacenar como 0.45. Sin embargo, si el usuario ingresa otro campo incorrecto y el formulario es rendido, el campo de porcentaje debería tener 45 y no 0.45. Con esto quiero decir que una devolución de llamada puede no ser la solución final. –

+0

puede escribir getters y setters para el porcentaje en el formato de cientos. por lo que tendrá el atributo #some_ratio y los métodos #some_ration_percentage & # some_ration_percentage = que simplemente dividirán/multiplicarán por 100 y continuarán. – Emirikol

Cuestiones relacionadas