path is relative while url is absolute.
The routing module provides URL rewriting in native Ruby. It's a way to redirect incoming requests to controllers and actions. It replaces the mod_rewrite rules.
_path
helpers provide a site-root-relative path. You should probably use this most of the time.
_url
helpers provide an absolute path, including protocol and server name. I've found that I mainly use these in emails when creating links to the app on the server. They should mainly be used when providing links for external use. (Think email links, RSS, and things like the copy and paste URL field under a YouTube video's "Share" section.)
When you put a link in your own site, the domain part of the route is redundant, and adds to the page size, so you can just use the path part of the URL with the *_path
helper. On the other hand, if the URL is to be consumed outside of your site, e.g. an email or an RSS feed, the whole URL is needed, so use the *_url
helper.
As the other answers explain, you should use _url
in email links, etc.
But I would like to add that you should also use _url
in redirects, as explained here:
https://www.ruby-forum.com/topic/101346#221052
and, here:
http://viget.com/extend/rails-named-routes-path-vs-url
You can also take a look at the relevant section of the HTTP specification here:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
_path provides relative path.
_url provides absolute path.
Whenever you send a URL in email etc. than it is a best practice to use _url instead of _path.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With