user2570506
user2570506

Reputation: 45

How to differentiate between :ids in routes/URL that belong to different models using FriendlyID?

I'm wondering how to generate a url that includes friendly ids for two different models. For example, if you have a post titled 'Rails Tutorial' and belonging to a particular User named 'Michael', and they each use a slug in place of their ID, how would you generate a url that looks like site.com/michael/rails-tutorial.

If you set your route to be:

get ':id/:id' => 'posts#show', as: 'show_post'

the URL will either be michael/michael or rails-tutorial/rails-tutorial, yet the way Friendly_id works from what I know is that your slug is represented by :id, so you can't configure it to work with get ':user_id/:post_id'.

I'm sure I just don't understand FriendlyID enough. Any help is appreciated.

Upvotes: 0

Views: 63

Answers (1)

hashrocket
hashrocket

Reputation: 2222

In order to get the url you’re looking for, you’ll need to nest your routes:

resources :users do
  resources :posts
end

This will give you the route:

localhost:3000/users/slug/post/slug

You’ll also have to extend FriendlyId in each model, add the slug to each model in a migration and use .friendly in the controller action(s).

Upvotes: 1

Related Questions