Topic title displaying in the URL

Hi

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

The standard is like:
www.bla.xyz/topics/1

In view of a good search engine ranking I would like to write the title
of a topic into the URL like:
www.bla.xyz/topics/super-cool-topic

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

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 = ?”,
topic_title]))afterwards.

def topic_to_url(topic_link)
topic_link.to_s
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(/[(,.?!;:’”)]/, “”)
topic_link.downcase
end

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
rescue
id
end

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.

-philip