Rails 3 - Customizing resourceful routes
I have resourceful routes set up for a blog (model name: Article).
I want to customize my resourceful route to point to
articles/show/title-of-my-article
Now I read through this:
http://edgeguides.rubyonrails.org/routing.html#cus开发者_Go百科tomizing-resourceful-routes
But it didn't seem to explain how to overwrite the params not just the :controller or :action. The thing is I could do a singular resource or match a GET request but I'd like to overwrite my resourceful routes so I can still use all the resource helpers (i.e. article_path(@article.title) ) etc.
Can Anyone help me out here, any and all help is much appreciated!
You should override the to_param method on your model:
class Article
def to_param
self.title
end
end
If you want to get a little bit trickier you should read up on generating custom slugs.
In addition to jonni's answer.
Overwriting the to_param method will produce the title when you call the resource helpers like article_path(@article) and it will be passed as the params[:id] to the controller.
Thereafter you will need to find the article more or less manually, i.e. instead of doing
Article.find(params[:id])
You will need to do
Article.find_by_title(params[:id])
I don't remember if that one creates a NotFound exception if the record is not found as the find method do so in that case you will have to check manually if a record was found and raise the exception yourself if it were not in order to trigger the 404-page.
One problem with doing this is that the title might consist of characters that is not allowed or recommended in a URL, so a better approach would be to store a slug based on the title in the database and find it by that.
(You can create the slug automatically by having a filter in the Model and create it by title.parameterize)
Easiest would of course be to use one of the many gems and plugins that already takes care of these things.
加载中,请稍侯......
精彩评论