Przyjazne URLe w Rails

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

1 Response to “Przyjazne URLe w Rails”


  1. 1 zawia5

    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

Leave a Reply