Forum: Ruby on Rails Routing through parent

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ryan M. (Guest)
on 2009-01-22 13:39
Hello,

At the moment I have the following route in my routes.rb file

map.resources :categories do |categories|
    categories.resources :products
end

Simple relationship...
product belongs_to a category
a category has_many products

is it possible to create a route where I could have something like:

map.product '/:category_name/:product_name'

I can't seem to get both of the controllers working together to create
such route.

Thanks in advance.

McKenzie
Andrew T. (Guest)
on 2009-01-22 14:02
(Received via mailing list)
On Thu, Jan 22, 2009 at 1:39 PM, Ryan M. <
removed_email_address@domain.invalid> wrote:

> product belongs_to a category
>
> McKenzie
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>
You can do that with map.connect ':category_name/:product_name',
:controller
=> <controller_name>, :action => <action_name>

You'll have to think about how good an idea it is to use only category
and
product names and not ids

Think about using to_param on your models which can then display both id
and
name
class Category < ActiveRecord::Base
  def to_param
    "#{id}-#{name.gsub(/[^\w\d]+/, '-')}"
  end
end

Then you don't have to mess with your routes and your urls will be
/1-category/2-product and your controllers will still get the id in
params[:id]

--
Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain
This topic is locked and can not be replied to.