Chcę, aby użytkownicy mogli mieć stronę profilu na stronie site.com/myNameHere. Railsy szukają kontrolera o nazwie "myNameHere". Czy jest możliwe ustawienie routes.rb tak, że jeśli kontroler nie zostanie znaleziony, "myNameHere" zostanie wysłany jako parametr do innego kontrolera?Jak mogę wdrożyć niestandardowe adresy URL w aplikacji Rails?
Odpowiedz
Możesz dodać trasę tak:
map.profile_link '/:username', :controller => 'profiles', :action => 'show'
Pamiętaj, aby dodać go na tyle niska w pliku poniżej swoich zasobów, aby nie kolidować z innymi drogami. Powinien mieć najniższy priorytet. Następnie musisz zmienić działanie programu, aby użyć nazwy użytkownika zamiast id:
def show
@user = User.find_by_username(params[:username])
end
To wszystko. Szczęśliwe kodowanie!
UPDATE:
I Rozszerzyliśmy tę odpowiedź do pełnego blogu, Vanity URLs in Ruby on Rails Routes. Mam dodatkowe próbki kodu i dokładniejsze wyjaśnienie.
Dzięki, pracowałeś jak czar. – user258980
Należy pamiętać, że trasa z symbolem wieloznacznym na poziomie podstawowym będzie pułapką błędów na najwyższym poziomie 404. To znaczy. http://domena.com/askdjasd. Więc prawdopodobnie chcesz dodać obsługę wyjątków (nie znaleziono) w akcji pokazu i wyrenderować błąd 404 zamiast błędu 500. –
W oparciu o to, co powiedział Dave Rapin, możesz użyć 'rescue_from ActiveRecord :: RecordNotFound,: with =>: your_404_method' w swoim kontrolerze, aby automatycznie wyświetlać błędy 404, gdy żaden użytkownik nie zostanie znaleziony. Będziesz musiał podnieść ten błąd ręcznie, jeśli używasz metody 'find_by_attribute', ponieważ nie podnosi ich automatycznie. Tak więc użyj 'raise ActiveRecord :: RecordNotFound, chyba że @ user = User.find_by_username (parametry [: username])' i związany z nim ratownik i jesteś złoty. – coreyward
Po prostu pomyślałem, że zaktualizuję to dla Rails 3. Mam pole "witryna" w moim modelu użytkownika, który będzie działał jako marność, i zamierzam prowadzić do statycznej strony dla każdej marności trasy. Chcę wyświetlać wszystkie zdarzenia użytkowników, jeśli nazywa się marność.
#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>
Myślę, że to dobra alternatywa, jeśli nie chcesz używać klejnotów.
- 1. Jak mogę kodować adresy URL w Pythonie?
- 2. Django - zawierają adresy URL aplikacji
- 3. Standardowe adresy URL ExpressJS/kanoniczne adresy URL:
- 4. bazowy URL Rails aplikacji w modelu
- 5. Wtyczki Wordpress: Jak dodać niestandardowe przyjazne adresy URL Uchwyty
- 6. Jak określić różne adresy URL w aplikacji szkieletowej?
- 7. Jak testować adresy URL inteligentnych aplikacji w środowisku deweloperskim
- 8. Jak mogę utworzyć adresy URL w Django podobne do stackoverflow?
- 9. W jaki sposób mogę testować adresy URL django?
- 10. Dynamiczne adresy URL Django
- 11. Jak mogę zaimplementować modularyzację w aplikacji Rails?
- 12. Wykryj adresy URL w UILabel
- 13. jak zaimplementować krótki URL, taki jak adresy URL w twitterze?
- 14. Absolutne adresy URL CakePHP
- 15. Jak mogę wyłączyć adresy URL "wielkanocnych jaj" PHP?
- 16. Jak mogę połączyć adresy URL za pomocą php?
- 17. Jak pisać adresy URL w lateksie?
- 18. Jak odblokowujesz adresy URL w Javie?
- 19. Jak mogę przekierować adresy URL svn do innej domeny?
- 20. Co oznaczają adresy URL raw.githubusercontent.com?
- 21. łączy względne adresy URL?
- 22. Jak wdrożyć aplikację Rails do Dreamhost?
- 23. Jak mogę wdrożyć funkcjonalność awt.CardLayout w mojej aplikacji javaFX 2.0?
- 24. Kohana 3 - Uzyskaj adresy URL:
- 25. Jak tworzyć niestandardowe adresy URL za pomocą Struts2? Podobnie jak www.twitter.com/goodyzain
- 26. Uzyskaj adresy URL bez hosta
- 27. Jak mogę profilować uruchamianie aplikacji Rails?
- 28. Jak wdrożyć routing adresów URL w PHP
- 29. Jak mogę wdrożyć Gravatar w Laravel?
- 30. Jak mogę przetestować ActiveRecord :: RecordNotFound w mojej aplikacji rails?
Po prostu upewnij się, że jeśli zdecydujesz się użyć klejnotu marności wiesz, że jest wulgaryzacja w vanities_controller.rb w przekierowaniu, aby dodać: only_path => true i powinieneś być dobry – dennis