Besides using the routing helper, you can also create paths and URLs from an array of parameters. Consider the following routing
ruby.rb
resources :magazines do
resources :ads
end
There are resources: ads (advertisements) in resources: magazines. If you use magazine_ad_path, instead of passing the id numerically You can pass an instance of Magazine and Ad as arguments respectively. Now you can refine the path with instance information for @magazine and @ad respectively.
<%= link_to 'Ad details', magazine_ad_path(@magazine, @ad) %>
You can also use url_for for a set of multiple objects. Even if you pass multiple objects, the proper routing is automatically determined.
<!--@with magazine@pass ad as an argument-->
<%= link_to 'Ad details', url_for([@magazine, @ad]) %>
In the above case, Rails will recognize that @magazine is Magazine and @ad is Ad and will call the magazine_ad_path helper based on that. It's amazing that you recognize this yourself. ..
Similarly, helpers such as link_to can simply pass an object instead of the full url_for call.
<%= link_to 'Ad details', [@magazine, @ad] %>
If you want to link to only one magazine, write:
<%= link_to 'Magazine details', @magazine %>
For all other actions, all you have to do is insert the action name in the first element of the array.
<%= link_to 'Edit Ad', [:edit, @magazine, @ad] %>
This allows you to treat an instance of the model as a URL. This is one of the great benefits of adopting a resourceful style.
It's amazing that Rails automatically generates a path by passing an instance to the path.
Reference Rails guide