Przyjazne URLe (w postaci: server.com/blog/123-tytul-bloga) w dowolnej aplikacji można w Railsach uzyskać bardzo łatwo. Cała pseudo-sztuczka opiera się na fakcie, że jeśli ID rekordu zaczyna się od cyfr, ActiveRecord wycina sobie tylko cyfry z początku ciągu znaków. Czyli wywołanie
1 | @blog = Blog.find(123) |
niczym się nie różni od
1 | @blog = Blog.find("123-tu_jakis_tytul") |
By uzyskać przyjazne URLe w aplikacji, do modelu należy dodać metodę to_param:
1 2 3 | def to_param "#{id}-#{title.parameterize}" end |
Tak byłoby jednak za prosto – railsy nie radzą sobie z literami “ł” i “Ł”. Poniżej więc proste obejście tego (wrzucić do pliku config/initializers/active_support.rb):
1 2 3 4 5 6 7 8 9 10 11 | module ActiveSupport module CoreExtensions module String module Inflections def parameterize(sep = '-') Inflector.parameterize(self.gsub("ł", "l").gsub("Ł", "L"), sep) end end end end end |
Witam
testuje Twój kod, i mam mały problem, znaki Ł i ł są pomijane
“Łaźnia turecka”.parameterize #=> “aznia-turecka”
“ławka”.parameterize #=> “awka”
ruby 1.8.6 rails 2.3.2 mysql 5.0