Rails 4: where (first) vs find_by (take)

Normalmente para encontrar un registro, que sabía de antemano era único, usaba algo como:

Usuario.where( email: "hola@correo.com" ).first

Sin embargo, me acabo de enterar que en Rails 4 agregaron un método que lo abrevia:

Usuario.find_by( email: "hola@correo.com" )

Y cuando el elemento a encontrar es forzoso, podemos agregar un “!” para que mande una excepción de ActiveRecord::RecordNotFound si no lo encuentra:

Usuario.find_by!( email: "hola@correo.com" )

Y es que no solo se escribe un poco menos, sino que es más eficiente, ya que viendo la definición de find_by:

# File activerecord/lib/active_record/relation/finder_methods.rb, line 80
def find_by(*args)
  where(*args).take
end

Nos damos cuenta que usa take en lugar de first y la diferencia entre ellos es que first hace un ORDER extra:

First:

SELECT "usuarios".* FROM "usuarios" WHERE "usuarios"."email" = 'hola@correo.com' ORDER BY "usuarios"."id" ASC LIMIT 1

Take:

SELECT "usuarios".* FROM "usuarios" WHERE "usuarios"."email" = 'hola@correo.com' LIMIT 1

Por lo que si lo que necesitamos es obtener un registro único, es mejor utilizar find_by. 🙂

Mejores mensajes de los commits en GIT

Es importante la calidad de los mensajes, para cuidar la ortografía y la longitud de líneas prefiero usar vim, por lo que veremos a continuación.

Lo instalamos en Ubuntu:

sudo apt-get install vim

Le decimos a Git que lo use:

git config --global core.editor "vim"

Creamos archivo “~/.vimrc” con lo siguiente:

autocmd Filetype gitcommit setlocal spell textwidth=72

Al hacer un commit, no usar opción -m para que lance la ventana de vim:

git commit

vim inicio

Vim tiene dos modos: el de edición y el de comando.

Al entrar a vim se estará en modo de comando por lo que al escribir algo o dar enter no se reflejará en pantalla, para ello hay que pasarse al modo texto presionando una sola vez la tecla “i”, esto hará que se pueda escribir normalmente, para saber que lo hicimos bien, podemos ver que hasta abajo dice “– INSERTAR –“.

vim insertar

Escribimos el texto del commit, por la configuración que agregamos vim automáticamente pasará a una nueva línea cuando el mensaje sea demasiado largo, además de revisar que no tengamos errores de ortografía.

ortografia

Para salir y guardar, en modo comando escribir:

:wq

Para cancelar:

:q!

Si usan español en los mensajes y no les corrige bien la ortografía, pasen al modo de comando con la tecla “ESC” y escriban el siguiente comando:

:setlocal spell spelllang=es

Les preguntará si desean crear un directorio, y si desean descargar los diccionarios, a todo digan que sí:

descargar corrector ortografia

Si siempre usan español, pueden cambiarlo en el archivo ~/.vimrc:

autocmd Filetype gitcommit setlocal spell spelllang=es textwidth=72

Recursos:
How do I make git use the editor of my choice for commits?
5 Useful Tips For A Better Commit Message
Vim en dos minutos

Teclado personalizado en Ubuntu 14.04

Hace poco tuve la necesidad de comprar un teclado USB para una laptop que tenía algunas teclas que no funcionaban.

Desafortunadamente, ningún mapeo se ajustaba por defecto a los dibujitos que tenía en mi teclado.

entradas

El más cercano era el de español de España, pero tenía los acentos invertidos (la tecla con la tilde normal la ponía invertida y viceversa).

Así que tuve que modificar el mapeo manualmente. Para esto se necesitan abrir los mapeos del español con permiso de administrador. Desde una terminal teclea:

cd /usr/share/X11/xkb/symbols/
sudo gedit es

En mi caso intercambié las entradas:

key <AD11> { [dead_grave, dead_circumflex, bracketleft, dead_abovering ] };
key <AC11> { [dead_acute, dead_diaeresis, braceleft, braceleft ] };

Dejándolas como:

key <AC11> { [dead_grave, dead_circumflex, bracketleft, dead_abovering ] };
key <AD11> { [dead_acute, dead_diaeresis, braceleft, braceleft ] };

Y lo mismo para las teclas que deseen cambiar. Después de guardar, hay que regenerar la configuración:

sudo dpkg-reconfigure xkb-data

Al lanzar la aplicación Entrada de Texto de Ubuntu ya deberían ver los cambios reflejados en el vistazo del teclado que aparece ahí.

Entrada De Texto

teclado

Después de cambiar todo lo necesario, para que los cambios se vieran en el editor de texto que ya tenía abierto, yo tuve que decirle a Ubuntu que cambiará el mapa de caracteres con el atajo Super+Espacio, osea la tecla Windows y el espacio.

Y ya se puede usar la nueva configuración personalizada en todas las aplicaciones.