> 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...
Take a look at the to_url method of http://github.com/rsl/stringex/tree/master
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