What is the difference between _url and _path while using the routes in rails

Ruby on-RailsRoutes

Ruby on-Rails Problem Overview


When we define routes in routes.rb using the name like map.some_link.We can use the link in two ways- some_link_url, some_link_path.

  • What are the differences between the two?
  • Which is more secure to be used?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

I had the same question and I wrote a small post about this in my blog

The reason is summarized here (I found this on a forum):

> *_path are for views because ahrefs are implicitly linked to the current URL. So it’d be a waste of bytes to repeat it over and over. In the controller, though, *_url is needed for redirect_to because the HTTP specification mandates that the Location: header in 3xx redirects is a complete URL.

Here is another explanation which says it depends on whether we need to use an absolute URI when linking to an SSL site from a non-SSL site, and vice versa.

What I have read so far, doesn't suggest that any of them is more secure than the other. It really comes down to what is the "proper" usage.

Solution 2 - Ruby on-Rails

path is relative while url is absolute.

Solution 3 - Ruby on-Rails

An example of the difference for a resource called "user":

users_url # => http://localhost:3000/users
users_path  # => /users

Solution 4 - Ruby on-Rails

Same answer as Petros, except that modern browsers handle relative redirects just fine. (I'd comment on his answer, but I can't yet.)

Solution 5 - Ruby on-Rails

By secure if you mean not exposing all the data passed, then _path is better as it generates a relative url, something like '/login' but _path would give 'http://localhost:3000/login';. Please refer to this blog post i found sometime back regarding the same. When _url is better than _path

Solution 6 - Ruby on-Rails

_url will give the entire path. As it contains the domain name and protocol, you can use it for eg. to send email or redirecting to another domain, etc.

_path will return the path which is after '/' without domain,protocol etc. So you can use it every now and then(I guess), where you don't require details of domain.

Solution 7 - Ruby on-Rails

The _url helper generates a string containing the entire URL, while the _path helper generates a string containing the relative path from the root of the application, e.g.:

photos_url  # => "http://www.example.com/photos"
photos_path # => "/photos"

As per Rails Guides - Routing.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMohamedSanaullaView Question on Stackoverflow
Solution 1 - Ruby on-RailsPetrosView Answer on Stackoverflow
Solution 2 - Ruby on-RailsponzaoView Answer on Stackoverflow
Solution 3 - Ruby on-RailsJasonView Answer on Stackoverflow
Solution 4 - Ruby on-RailsIan LotinskyView Answer on Stackoverflow
Solution 5 - Ruby on-RailsAlok SwainView Answer on Stackoverflow
Solution 6 - Ruby on-RailsRadhikaView Answer on Stackoverflow
Solution 7 - Ruby on-RailsjbkView Answer on Stackoverflow