Soluciones Variadas para Problemas Variados en Rails 4 – Parte 2

Continúo trayendo contenido que tiene que ver mucho con soluciones a problemas que encuentro mientras estoy haciendo aplicaciones web usando Ruby on Rails. Puedes ver la primera parte siguiendo el enlace.

Resulta que normalmente el stack de herramientas para desarrollar algo usando Rails incluye al menos un motor de base de datos y un servidor para montar la aplicación en producción. En mi caso puntual, la app se está haciendo sobre PostgreSQL y hasta cierto punto se usaba Heroku como servidor para el ambiente test.

Excediendo el límite de Heroku free

En una de esas ocasiones donde aparecen errores no antes visto, me encontré con un pequeño detalle en los logs de Heroku.

PGError: ERROR: permission denied for relation…

Demasiado loco el error. Busqué por otras partes cuando lo que debí haber hecho fue buscar en Google. Una vez lo hice, la respuesta apareció en nada más y nada menos que el Google de los desarrolladores: Stack Overflow.

Ese error viene dado cuando la cuenta de Heroku excede el límite de la cuota de espacio que tiene.

Resulta que los seeds de la aplicación excedían por mucho los valores permitidos por Heroku. ¿Cómo saberlo? Ejecutando el comando

heroku pg:info

Al final terminamos por mover la aplicación a un servidor propio en Linode.

Divisiones de decimales en Ruby

ruby on rails development

Continuando en la misma aplicación, tenía que crear una función que insertará algunos registros en unas tablas cuando un modelo recibiera un nuevo registro. Para ello me valí de los callbacks de rails.

Uno de los valores a guardar se generaba a partir de una división, sin embargo, al utilizar el operador normal de división / al final solo obtenía un número entero (me daba cuenta porque hacía la operación en calculadora).

Resulta que para Ruby, al dividir un decimal con un entero, el resultado será siempre entero.

Para lograr que Ruby devuelva un decimal esperado de una división con un entero, se puede aplicar el punto y el valor decimal a alguno de los operandos. Ejemplo:

Si divides 2 / 3 Ruby te arrojará 0 cómo resultado.

Pero si lo haces así 2.0 / 3 Ruby te arrojará 0.6666667.

Otra forma de lograr el mismo resultado es usando el método de la clase Numeric fdiv(). El cual puedes llamar de esta forma:

2.fdiv(3)

O simplemente agregando to_f para forzar que uno de los valores se convierta en flotante o decimal.

La(s) respuesta(s) también la(s) encontré en Stack Overflow.

Multipart + remote: true en Rails

Al grano. No se pueden cargar archivos mediante un formulario usando AJAX. Por cuestiones de seguridad los navegadores no lo permiten. Usando AJAX sí que puedes enviar datos serializados en JSON o XMl, pero olvídate de cargar una imagen.

Sin embargo, si lo necesitas hacer y estás desarrollando algo en rails, hay una gema que te hace la vida fácil: remotipart.

Esta gema lo que hace es usar la técnica del iframe oculto para “engañar” al navegador y cargar el archivo usando el formulario con la opción multipart.

Lo mejor de la gema es que solo necesitas agregarla al gemfile y listo. No hay que hacer más nada.

¿Dónde encontré la solución? En Stack Overflow 🙂

Más adelante estaré trayendo más soluciones variadas a problemas variados.

Autor: cesc1989

Ingeniero de Sistemas que le gusta escribir y compartir sobre recursos que considera útiles, además que le gusta leer manga y ver anime.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s