Quiero que los usuarios puedan tener una página de perfil en site.com/myNameHere. Rails busca un controlador llamado "myNameHere". ¿Es posible configurar routes.rb para que, si no se encuentra el controlador, se envíe "myNameHere" como parámetro a otro controlador?¿Cómo puedo implementar URL vanity en una aplicación de Rails?
Respuesta
Usted puede agregar una ruta como esta:
map.profile_link '/:username', :controller => 'profiles', :action => 'show'
Asegúrese de añadir que baja lo suficiente en el archivo, por debajo de sus recursos, que no interfiere con otras rutas. Debería ser la prioridad más baja. A continuación, usted tiene que cambiar su programa de acción para utilizar un nombre de usuario en lugar de Identificación:
def show
@user = User.find_by_username(params[:username])
end
Eso es todo lo que hay que hacer. Feliz codificación!
ACTUALIZACIÓN:
he ampliado esta respuesta en una entrada de blog completo, Vanity URLs in Ruby on Rails Routes. Tengo muestras de código adicionales y una explicación más completa.
Gracias, funcionó como un amuleto. – user258980
Querrá tener en cuenta que una ruta de comodín en el nivel raíz atrapará lo que deberían ser errores 404 de nivel superior. Es decir. http://domain.com/askdjasd. Por lo tanto, probablemente desee agregar un control de excepciones (no encontrado) en su acción de mostrar y generar su error 404 en lugar de 500. –
Sobre la base de lo que dijo Dave Rapin, puede usar 'rescue_from ActiveRecord :: RecordNotFound,: with =>: your_404_method' en su controlador para mostrar errores 404 automáticamente cuando no se encuentra un usuario. Deberá plantear ese error manualmente si está utilizando un método 'find_by_attribute' porque no los sube automáticamente. Así que use 'raise ActiveRecord :: RecordNotFound a menos que @user = User.find_by_username (params [: username])' y el rescate asociado y esté dorado. – coreyward
Solo pensé en actualizar esto para Rails 3. Tengo un campo 'sitio web' en mi modelo de usuario que va a actuar como la ruta de vanidad, y voy a dirigirme a una página estática para cada ruta de vanidad. Quiero mostrar todos los eventos de un usuario si se llama a la ruta de vanidad.
#config/routes.rb
get '/:website', :controller => 'static_pages', :action => 'vanity'
#app/controllers/static_pages_controller.rb
def vanity
@user = User.find_by_website(params[:website])
if @user != nil #in case someone puts in a bogus url I redirect to root
@events = @user.events
else
redirect_to :root
end
end
#app/views/static_pages/vanity.html.erb
<h1><%= @user.website %> events</h1>
<table>
<tr>
<th>Title</th>
<th>Starts at</th>
<th>Description</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @events.each do |event| %>
<tr>
<td><%= event.title %></td>
<td><%= event.starts_at %></td>
<td><%= event.description %></td>
</tr>
<% end %>
</table>
Creo que esta es una buena alternativa si no quieres usar una gema.
- 1. ¿Cómo puedo implementar Modularización en una aplicación de Rails?
- 2. ¿Cómo implementar una aplicación de Rails en Dreamhost?
- 3. ¿Cómo implementar parciales erb en una aplicación non rails?
- 4. ¿Cómo puedo escapar una URL de una cadena en Rails?
- 5. ¿Cómo implementar una aplicación Rails asíncrona segura para hilos?
- 6. direcciones URL prefijo en aplicación Rails
- 7. Cómo implementar la aplicación Rails 3.1 en un subdirectorio
- 8. ¿Cómo implementar una aplicación Qt en Windows?
- 9. ¿Cómo implementar remotamente una aplicación en weblogic?
- 10. ¿Cómo implementar un modelo de amistad en Rails 3 para una aplicación de red social?
- 11. Cómo implementar mdi en una aplicación WPF
- 12. ¿Cómo puedo desactivar completamente CoffeeScript en una aplicación Rails 3.1?
- 13. GoogleApps: cómo puedo implementar mi aplicación
- 14. ¿Cómo puedo encontrar la URL base de una aplicación?
- 15. ¿Cómo puedo implementar un asistente desde una aplicación Windows Mobile?
- 16. ¿Cómo puedo implementar una aplicación web con sbt 0.11?
- 17. Cómo implementar una api más rápida de búsqueda como tipo (SAYT) en la aplicación Rails 3
- 18. ¿Cómo implementar REST en una aplicación web?
- 19. Aplicación Rails usando Mysql cómo implementar con heroku?
- 20. Cómo organizar una aplicación Rails
- 21. ¿Cómo puedo probar ActiveRecord :: RecordNotFound en mi aplicación Rails?
- 22. Cómo implementar una aplicación de consola
- 23. ¿Cómo puedo analizar fácilmente una URL con parámetros en una prueba de Rails?
- 24. ¿Puedo abrir una aplicación de Windows 8 con una URL?
- 25. Alojando una aplicación Rails en Linode
- 26. En Rails, ¿cómo puedo implementar un menú de selección HTML usando una matriz de cadenas?
- 27. Implementar sonidos en una aplicación de Android
- 28. Rails 3/PhoneGap: ¿Cómo convertir una aplicación de Rails en una aplicación de iOS Phonegap?
- 29. ¿Cómo puedo eliminar una URL?
- 30. ¿Cómo puedo implementar una jerarquía de roles en una aplicación asp.net mvc usando activedirectorymembershipprovider
Solo asegúrate de que si eliges usar la vanidad, sabes que hay vulrenability en vanities_controller.rb en el redirect_to solo agrega: only_path => true y debes ser bueno – dennis