# Dynamic Routing

**URL:** <https://www.ruby-forum.com/t/dynamic-routing/86776>\
**Category:** Rails\
**Created:** [February 25, 2007, 8:36pm UTC](https://www.ruby-forum.com/t/dynamic-routing/86776 "2007-02-25T20:36:04Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 25, 2007, 8:36pm UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/1 "2007-02-25T20:36:04Z")

</div>

Hi,  
I want to have the following URL structure  
/music  
/movies  
etc. for categories of the site.

/about  
/help  
etc. for static pages.

Both types auf URLs should be generated dynamically.

But how do I route them?

map.connect ‘/:category/’, :controller=\>‘magazine’, :action=\>‘index’,  
:rubrik =\> // #should be generated from database, but how?

map.connect ‘/:page/’, :controller=\>‘magazine’, :action=\>‘page’,  
:page =\> /[(help)|(about)]/ #but should also be generated  
dynamically

Thanks.

---

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 25, 2007, 9:52pm UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/2 "2007-02-25T21:52:13Z")

</div>

Sounds interesting.  
But I’ve already found a simpler solution, without making a plugin:

map.connect ‘/’, :controller =\>‘magazin’, :action=\>‘index’  
map.connect ‘/:rubrik/’, :controller=\>‘magazin’, :action=\>‘index’,  
:rubrik =\> Regexp.new(Category.find(:all).collect {|o|  
“(#{o.name})”}.join(‘|’).downcase)

map.connect ‘/:page/’, :controller=\>‘magazin’, :action=\>‘page’,  
:page =\> Regexp.new(Page.find(:all).collect {|o|  
“(#{o.title})”}.join(‘|’).downcase)

map.slug ‘/:slug/’, :controller =\>‘magazin’, :action=\>‘artikel’

You can create an Regexp from an array. Great. But maybe slow?

nice regards,  
ernst

On 2/25/07, Bojan M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > etc. for static pages.
> 
> best regards,
> 
> >

–  
wer viel lest ist viel gebildet.

---

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 25, 2007, 9:37pm UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/3 "2007-02-25T21:37:12Z")

</div>

Ernst Beiglböck wrote:

> Both types auf URLs should be generated dynamically.
> 
> But how do I route them?
> 
> map.connect ‘/:category/’, :controller=\>‘magazine’, :action=\>‘index’,  
> :rubrik =\> // #should be generated from database, but how?
> 
> map.connect ‘/:page/’, :controller=\>‘magazine’, :action=\>‘page’,  
> :page =\> /[(help)|(about)]/ #but should also be generated dynamically
> 
> Thanks.

[http://www.aflatter.de/typo/articles/2007/01/14/dynamic-routing-in-rails](http://www.aflatter.de/typo/articles/2007/01/14/dynamic-routing-in-rails)

I run into one article when looking for a way to implement routes from  
database and multi-language URL’s. It could be of interest to you, I  
didn’t try it yet:

[http://www.aflatter.de/typo/articles/2007/01/14/dynamic-routing-in-rails](http://www.aflatter.de/typo/articles/2007/01/14/dynamic-routing-in-rails)

best regards,  
Bojan

–  
Bojan M.  
Informatika Mihelac, Bojan M. s.p. | [www.informatikamihelac.com](http://www.informatikamihelac.com)  
 → tools, scripts, tricks from our code lab: [http://source.mihelac.org](http://source.mihelac.org)

---

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 26, 2007, 2:26am UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/4 "2007-02-26T02:26:33Z")

</div>

Hi –

On 2/25/07, Phlip [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > etc. for static pages.  
> > assert\_routing ‘/mr\_smith’,  
> > :controller =\> ‘account’,  
> > :action =\> ‘home\_page’,  
> > :login =\> ‘mr\_smith’
> 
> Now you just read a \*param in your controller, and render the appropriate  
> response.

I think you probably want :login, rather than \*login. \*login gives you  
a route glob, which might contain any number of fields. They’ll be  
delivered to the action in an array (params[:login]), whereas with  
:login you’ve got just one wildcard field, which will be delivered as  
a string.

There’s a bit of a potential problem with this route, though. If  
someone has a login name that’s the same as a controller, you might be  
in trouble:

> > ActionController::Routing::Routes.recognize\_path(“/dblack”)  
> > =\> {:login=\>“dblack”, :controller=\>“account”, :action=\>“home\_page”}  
> > ActionController::Routing::Routes.recognize\_path(“/questions”)  
> > =\> {:controller=\>“questions”, :action=\>“index”}

If someone happens to sign up as “questions”, their home page link  
won’t work. So it might be better to do something like:

map.connect ‘home/:login’, :controller =\> “account”, :action =\>  
“home\_page”

which gives you:

> > ActionController::Routing::Routes.recognize\_path(“/home/david”)  
> > =\> {:login=\>“david”, :controller=\>“account”, :action=\>“home\_page”}  
> > ActionController::Routing::Routes.recognize\_path(“/home/questions”)  
> > =\> {:login=\>“questions”, :controller=\>“account”, :action=\>“home\_page”}

David

–  
Q. What is THE Ruby book for Rails developers?  
A. RUBY FOR RAILS by David A. Black ([http://www.manning.com/black](http://www.manning.com/black))  
(See what readers are saying! [http://www.rubypal.com/r4rrevs.pdf](http://www.rubypal.com/r4rrevs.pdf))  
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?  
A. Ruby Power and Light, LLC ([http://www.rubypal.com](http://www.rubypal.com))

---

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 26, 2007, 12:14am UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/5 "2007-02-26T00:14:24Z")

</div>

Ernst Beiglböck wrote:

> I want to have the following URL structure  
> /music  
> /movies  
> etc. for categories of the site.
> 
> /about  
> /help  
> etc. for static pages.

This provides a custom homepage for any user: [site.com/my\_name](http://site.com/my_name)

map.connect ‘:controller/:action/:id’  
map.connect ‘\*login’, :controller =\> ‘account’, :action =\> ‘home\_page’

The trick is that param[:login] arrives in your controller.

I suspect I should have tested my system with this:

```
assert_routing '/mr_smith',
               :controller => 'account',
               :action => 'home_page',
               :login => 'mr_smith'

```

Now you just read a \*param in your controller, and render the  
appropriate  
response.

–  
Phlip  
[Redirecting...](http://www.greencheese.us/ZeekLand) ← NOT a blog!!!

---

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 26, 2007, 7:21pm UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/6 "2007-02-26T19:21:38Z")

</div>

Ernst Beiglböck wrote:

> “(#{o.title})”}.join(‘|’).downcase)
> 
> map.slug ‘/:slug/’, :controller =\>‘magazin’, :action=\>‘artikel’
> 
> You can create an Regexp from an array. Great. But maybe slow?
> 
> nice regards,  
> ernst

Do you reload routes when category or page is added in database?

best regards,  
Bojan

–  
Bojan M.  
Informatika Mihelac, Bojan M. s.p. | [www.informatikamihelac.com](http://www.informatikamihelac.com)  
 → tools, scripts, tricks from our code lab: [http://source.mihelac.org](http://source.mihelac.org)

---

<div class="post-metadata">

**Author:** ![Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/13edae/32.png) [@Ernst\_BeiglbSSSSck](https://www.ruby-forum.com/u/Ernst_BeiglbSSSSck)\
**Post date:** [February 27, 2007, 9:07pm UTC](https://www.ruby-forum.com/t/dynamic-routing/86776/7 "2007-02-27T21:07:26Z")

</div>

I didn’t think of it, but now as you say it I think I better should 😉

On 2/26/07, Bojan M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > map.connect ‘/:page/’, :controller=\>‘magazin’, :action=\>‘page’,
> 
> >

–  
wer viel lest ist viel gebildet.
