Relativamente nuevo en los rieles, por lo que tengo problemas para encontrar una solución para este problema.
Actualmente tiene una ruta: /test/testing/:id
Donde una vez que un usuario llega a la ruta, encontrará un elemento en la base de datos con esa identificación específica y establecerá la URL en localhost:3000/test/testing/1-name-of-this-item
Sin embargo, si solo escribe manualmente esa URL, por ejemplo: localhost:3000/test/testing/1
, me gustaría que redirija a /test/testing/1-name-of-this-item
O si hay alguna forma para cambiar los parámetros antes de cargar la página. Pero no estoy completamente seguro de cómo hacer esto.
¡Gracias por la ayuda!
Puedes probar dos formas de manejar esto
1: use la siguiente gema que construirá URL según el atributo que desee https://github.com/norman/friendly_id
2: anule el método to_param en su modelo y pase el atributo que le gustaría mostrar en la ruta URL
Por su comentario anterior, supongo que tiene un modelo de Testing
que tiene al menos una columna llamada id
y una path
de columna. Debido a que no mencionó cómo se genera la ruta, supondré que la columna se completa previamente y devuelve slugs como 1-name-of-this-item
y que el número que antecede a la ruta siempre está sincronizado con la identificación del registro.
Además, supongo que tiene sus rutas configuradas correctamente y que /test
es un espacio de nombres y /testing
se define como resources :testing
. Eso me hace suponer que Rails generó un path_helper como test_testing_path
.
Si ese es el caso, entonces podría ser suficiente simplemente cambiar su método de controlador de show
a esto:
def show @testing = Testing.find(params[:id]) if @testing.path != params[:id] redirect_to test_testing_path(@testing.path) else respond_to do |format| format.html # show.html.erb format.json { render json: @testing } end end end
Me lo imaginé; hay una gema llamada refracción que es un middleware que le permite modificar la URL antes de que la aplicación la procese, lo que funciona bien.