¿Cómo crear una nueva acción de controlador en Rails?
En el desarrollo de aplicaciones Rails, la creación de acciones de controlador que interactúan con Service Objects es clave para mantener organizada la lógica del negocio. Aquí explicaremos cómo crear una nueva acción de controlador para gestionar los estados de una tarea, garantizando además su correcto funcionamiento mediante pruebas.
¿Cómo agregar una nueva acción al controlador?
-
Localizar y editar el controlador de tareas:
- Abre el archivo del controlador de tareas y busca un lugar adecuado para adicionar la nueva acción.
-
Definir la acción y su estructura:
- Agrega la función
def trigger dentro del controlador. Esta acción recibirá un parámetro que permitirá actualizar el estado de una tarea específica.
def trigger
end
-
Modificar el before_action:
- Es necesario incluir la acción
trigger en el before_action para configurar el evento justo antes de ejecutar esta acción.
before_action :set_task, only: [:show, :edit, :update, :destroy, :trigger]
¿Cómo definir las rutas para la nueva acción?
- Añadir la nueva ruta:
- Dentro de
config/routes.rb, agrega la nueva ruta usando el verbo HTTP patch, que es apropiado para editar recursos existentes.
resources :tasks do
member do
patch :trigger
end
end
- Verificar las rutas creadas:
- Utiliza la consola de comandos con
rails routes para confirmar que la ruta se ha integrado correctamente.
¿Cómo escribir pruebas para garantizar el funcionamiento?
-
Preparar el entorno de prueba:
- Accede al archivo de pruebas de petición en la carpeta
spec/requests.
-
Definir la prueba:
- Añade un nuevo bloque
describe y dentro de este, la prueba para la acción trigger. Esto asegura que el estado de la tarea se actualice correctamente.
describe "PATCH /tasks/:id/trigger" do
it "updates the task state" do
task = create(:task)
patch trigger_task_path(task), params: { event: 'start' }
task.reload
expect(task.state).to eq('inprocess')
end
end
¿Cómo manejar el acceso con CanCan?
- Asegurar autorizaciones:
- Confirma que el usuario autentificado es el propietario de la tarea, dado que CanCan evalúa los permisos basados en la propiedad de la tarea.
let(:user) { create(:user) }
let(:task) { create(:task, owner: user) }
- Ejecutar las pruebas:
- Corre las pruebas con
rspec para verificar que el sistema reconozca las autorizaciones y la funcionalidad esté intacta.
Crear una nueva acción de controlador que interactúa con un Service Object optimiza el manejo de estados en una aplicación Rails. Además, el establecimiento de pruebas contundentes garantiza la fiabilidad de su implementación. Considera extender las pruebas a casos negativos para asegurar una robustez aún mayor. ¿Listo para ello? ¡Adelante, marco a marco, tu proyecto crecerá!