arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Qué son los strong_params en Rails

Sol

av_timer 2 Min. de lectura

remove_red_eye 244 visitas

calendar_today 22 Julio 2022

En esta entrega vamos a hablar sobre los strong parameters en Rails: qué son, para qué nos sirven y cómo utilizarlos.

Qué son los strong parameters

Cuando hablamos de strong parameters (en español: parámetros fuertes) nos referimos a un método que nos facilita tener control y seguridad al procesar datos en Rails. Se llaman así porque nos permite filtrar los parámetros que recibimos, de modo que solamente los parámetros que indicamos son tomados en cuenta por nuestro controlador.

¡Veámoslo en la práctica!

Digamos que tenemos un modelo Usuario, y también disponemos del siguiente controlador:

class UsuariosController < ApplicationController
    def create
        usuario = Usuario.create!(usuario_params)
        redirect_to @usuario
    end

    private

    def usuario_params
        params[:usuario]
    end
end

Nuestro código aquí no se está fijando qué campos estamos recibiendo. Esto significa que sin importar los datos que recibamos estos se guardarán en la base de datos. Más adelante explicaré en un caso de uso por qué esto puede llegar a ser peligroso para la seguridad de nuestra aplicación.

Para modificar este comportamiento podemos convertir el método para usar strong params. Primero, indicamos el nombre del modelo de la siguiente manera:

def usuario_params
    params.require(:usuario)
end

Si tratamos de correr nuestro código, veremos que todavía no funciona. Esto es porque le dijimos a Rails que queremos usar strong params, pero todavía no indicamos los parámetros que queremos permitir. Solamente tenemos que agregar permit con los campos que deseemos entre paréntesis:

def usuario_params
    params.require(:usuario).permit(:email, :password)
end

Ahora nuestro método espera recibir un Usuario con dos campos: email y password. Si luego quisiéramos agregar edad, el código se vería así:

params.require(:usuario).permit(:email, :password, :edad)

¡Listo! Nuestro controlador ahora es más seguro. Solamente debemos recordar agregar nuevos parámetros conforme nos hagan falta.

Beneficios de los strong parameters

Para entender por qué es importante usar strong params, imaginemos que nuestro modelo Usuario posee un campo admin, que puede ser true o false. Si el campo es verdadero, nuestra aplicación sabe que se trata de un usuario administrador, así que le permitimos hacer cosas de administrador (por ejemplo, crear, modificar o eliminar otros usuarios). Si su campo admin es falso, entonces es un usuario regular, sin permisos especiales.

Con nuestra primera implementación (params[:usuario]), cualquiera podía hacer una solicitud agregando manualmente admin: true, convirtiéndose en administrador sin nuestro permiso. Ya usando strong params nos ahorramos de este dolor de cabeza, ya que aun si alguien nos envía admin: true, Rails se fija en los campos incluidos en permit, ve que el campo admin no está, y lo filtra por nosotros.

Por último, la sintaxis es muy clara y bonita, así que ahora sabes por qué Rails introduce esta validación al crear y actualizar registros.

Si tienes dudas o sugerencias no dudes en escribirnos en los comentarios.