I'm trying to achieve URLs like this in Rails:
http://localhost/posts/1234/post-slug-name
with both ID and slug name instead of either
http://localhost/posts/1234
or
http://localhost/posts/post-slug-name
(right now I have just slug name in URL, so this part is over). How can I do this?
UPD
I found an article on this: http://augustl.com/blog/2009/styling_rails_urls/, instead of /id/slug
it suggests to use /id-slug
which works perfectly for me, so I'll go with this.
the stringex gem contains ActsAsUrl to create URI-friendly representations of an attribute
https://github.com/rsl/stringex
It also contains a Unidecoder library, which can convert Unicode to ASCII.
You'll want to add a regular route with Route Globbing in addition to your resource route (assuming of course that's how your
posts
routes are defined). For example,I know the question is quite old but I think it still deserves some interest and none of the answers are up-to-date or provide a way to generate exactly what the OP was looking for (i.e.
http://localhost/posts/1234/post-slug-name
).In routes.rb
Then in the views
You might want to define a slug method in your model to avoid calling parameterize in the views.
Rails has some built-in support for SEO friendly URLs.
You can create a url in the form: "id-title" by simply overriding the to_param method in your model.
This is from one of my projects and creates a url with the id, category name and model name:
Rails is smart enough to extract this back into the plain id when you access your controller action, so the following just works:
Use friendly_id. It has one nice feature: you can update your url without breaking the old one.
Generating view url isn't working for me. I just added a small method in the model
I wrote a post about slugs in Rails 3. It provides pretty URL's and even more, secures your site from random scripts that ask for information just by increasing ID's. Also it avoids saving slugs in the database.