Topic title displaying in the URL


I would like to integrate the title string into a URL.

The standard is like:

In view of a good search engine ranking I would like to write the title
of a topic into the URL like:

The problem are special characters like ‘?()&#’ etc. in the title

This is my route thinking:
map.connect ‘:controller/:topictitle’, :controller => ‘topics’, :action
=> ‘show’

Now I need a revokable solution to turn the title into a suiteable form
without special characters which could make problems.

Here is a function that can do the fitting, but it is not revokable, so
I can’t do the Find command in the Controller (topic =
Topic.find(:first, :conditions => [“title = ?”,

def topic_to_url(topic_link)
topic_link = topic_link.gsub(/[ä]/, “ae”)
topic_link = topic_link.gsub(/[ü]/, “ue”)
topic_link = topic_link.gsub(/[ö]/, “oe”)
topic_link = topic_link.gsub(" “, “-”)
topic_link = topic_link.gsub(/[(,.?!;:’”)]/, “”)

Is there a better way to do the integration?
Is there a function to convert strings into url suitable forms which can
undo the hole thing afterwards?
Should I commit also the ID?

I would love to here how you do that…

Greeting, Chaos

The problem are special characters like ‘?()&#’ etc. in the title

topic_link = topic_link.gsub(/[ö]/, “oe”)

I would love to here how you do that…

Take a look at the to_url method of
It handles all of this for you.

Then, if it were me, put your route back to it’s default of using :id
and then in your Topic model do:

def to_param
“#{id} #{title}”.to_url

That will have the affect that for the most part you will get nice
urls like ‘/topics/123-super-cool-topic’ but in the worst case you’ll
still get the id of 123. So in your controller you can simply do:

Topic.find_by_id(params[:id].to_i) # to_i will strip everything after
the dash leaving you with just the id.


This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs