Creates a link tag of the given name using a URL created by the
set of options. See the valid options in the documentation for url_for. It‘s also possible to pass
a string instead of an options hash to get a link tag that uses the value
of the string as the href for the link, or use :back to link to
the referrer - a JavaScript back link will be used in place of a referrer
if none exists. If nil is passed as a name, the link itself will become the
name.
Signatures
link_to(name, options = {}, html_options = nil)
link_to(options = {}, html_options = nil) do
# name
end
Options
- :confirm => ‘question?‘ - This will add a
JavaScript confirm prompt with the question specified. If the user accepts,
the link is processed normally, otherwise no action is taken.
- :popup => true || array of window options - This will force the
link to open in a popup window. By passing true, a default browser window
will be opened with the URL. You can also specify an array of options that
are passed-thru to JavaScripts window.open method.
- :method => symbol of HTTP verb - This modifier will dynamically
create an HTML form and immediately submit the form for processing using
the HTTP verb specified. Useful for having links perform a POST operation
in dangerous actions like deleting a record (which search bots can follow
while spidering your site). Supported verbs are :post,
:delete and :put. Note that if the user has JavaScript
disabled, the request will fall back to using GET. If you are relying on
the POST behavior, you should check for it in your controller‘s
action by using the request object‘s methods for post?,
delete? or put?.
- The html_options will accept a hash of html attributes for the
link tag.
Note that if the user has JavaScript disabled, the request will fall back
to using GET. If :href => ’#’ is used and the user
has JavaScript disabled clicking the link will have no effect. If you are
relying on the POST behavior, your should check for it in your
controller‘s action by using the request object‘s methods for
post?, delete? or put?.
You can mix and match the html_options with the exception of
:popup and :method which will raise an
ActionView::ActionViewError exception.
Examples
Because it relies on url_for,
link_to supports both
older-style controller/action/id arguments and newer RESTful routes.
Current Rails style favors RESTful routes
whenever possible, so base your application on resources and use
link_to "Profile", profile_path(@profile)
# => <a href="/profiles/1">Profile</a>
or the even pithier
link_to "Profile", @profile
# => <a href="/profiles/1">Profile</a>
in place of the older more verbose, non-resource-oriented
link_to "Profile", :controller => "profiles", :action => "show", :id => @profile
# => <a href="/profiles/show/1">Profile</a>
Similarly,
link_to "Profiles", profiles_path
# => <a href="/profiles">Profiles</a>
is better than
link_to "Profiles", :controller => "profiles"
# => <a href="/profiles">Profiles</a>
You can use a block as well if your link target is hard to fit into the
name parameter. ERb example:
<% link_to(@profile) do %>
<strong><%= @profile.name %></strong> -- <span>Check it out!!</span>
<% end %>
# => <a href="/profiles/1"><strong>David</strong> -- <span>Check it out!!</span></a>
Classes and ids for CSS are easy to produce:
link_to "Articles", articles_path, :id => "news", :class => "article"
# => <a href="/articles" class="article" id="news">Articles</a>
Be careful when using the older argument style, as an extra literal hash is
needed:
link_to "Articles", { :controller => "articles" }, :id => "news", :class => "article"
# => <a href="/articles" class="article" id="news">Articles</a>
Leaving the hash off gives the wrong link:
link_to "WRONG!", :controller => "articles", :id => "news", :class => "article"
# => <a href="/articles/index/news?class=article">WRONG!</a>
link_to can also produce
links with anchors or query strings:
link_to "Comment wall", profile_path(@profile, :anchor => "wall")
# => <a href="/profiles/1#wall">Comment wall</a>
link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
# => <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a>
link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
# => <a href="/searches?foo=bar&baz=quux">Nonsense search</a>
The three options specific to link_to (:confirm,
:popup, and :method) are used as follows:
link_to "Visit Other Site", "http://www.rubyonrails.org/", :confirm => "Are you sure?"
# => <a href="http://www.rubyonrails.org/" onclick="return confirm('Are you sure?');">Visit Other Site</a>
link_to "Help", { :action => "help" }, :popup => true
# => <a href="/testing/help/" onclick="window.open(this.href);return false;">Help</a>
link_to "View Image", @image, :popup => ['new_window_name', 'height=300,width=600']
# => <a href="/images/9" onclick="window.open(this.href,'new_window_name','height=300,width=600');return false;">View Image</a>
link_to "Delete Image", @image, :confirm => "Are you sure?", :method => :delete
# => <a href="/images/9" onclick="if (confirm('Are you sure?')) { var f = document.createElement('form');
f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;
var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method');
m.setAttribute('value', 'delete'); f.appendChild(m);f.submit(); };return false;">Delete Image</a>