Method: ActionView::Helpers::UrlHelper#link_to
- Defined in:
- actionview/lib/action_view/helpers/url_helper.rb
#link_to(name = nil, options = nil, html_options = nil, &block) ⇒ Object
Creates an anchor element 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, which generates an anchor element that uses the value of the String as the href for the link. Using a :back Symbol instead of an options hash will generate a link to the referrer (a JavaScript back link will be used in place of a referrer if none exists). If nil is passed as the name the value of the link itself will become the name.
Signatures
link_to(body, url, = {})
# url is a String; you can use URL helpers like
# posts_path
link_to(body, = {}, = {})
# url_options, except :method, is passed to url_for
link_to( = {}, = {}) do
# name
end
link_to(url, = {}) do
# name
end
link_to(active_record_model)
Options
-
:data- This option can be used to add custom data attributes.
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>
When name is nil the href is presented instead
link_to nil, "http://example.com"
# => <a href="http://www.example.com">http://www.example.com</a>
More concise yet, when name is an Active Record model that defines a to_s method returning a default value or a model instance attribute
link_to @profile
# => <a href="http://www.example.com/profiles/1">Eileen</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>
You can set any link attributes such as target, rel, type:
link_to "External link", "http://www.rubyonrails.org/", target: "_blank", rel: "nofollow"
# => <a href="http://www.rubyonrails.org/" target="_blank" rel="nofollow">External link</a>
Turbo
Rails 7 ships with Turbo enabled by default. Turbo provides the following :data options:
-
turbo_method: symbol of HTTP verb- Performs a Turbo link visit with the given HTTP verb. Forms are recommended when performing non-GETrequests. Only usedata-turbo-methodwhere a form is not possible. -
turbo_confirm: "question?"- Adds a confirmation dialog to the link with the given value.
Consult the Turbo Handbook for more information on the options above.
Examples
link_to "Delete profile", @profile, data: { turbo_method: :delete }
# => <a href="/profiles/1" data-turbo-method="delete">Delete profile</a>
link_to "Visit Other Site", "https://rubyonrails.org/", data: { turbo_confirm: "Are you sure?" }
# => <a href="https://rubyonrails.org/" data-turbo-confirm="Are you sure?">Visit Other Site</a>
198 199 200 201 202 203 204 205 206 207 208 |
# File 'actionview/lib/action_view/helpers/url_helper.rb', line 198 def link_to(name = nil, = nil, = nil, &block) , , name = , name, block if block_given? ||= {} = (, ) url = url_target(name, ) ["href"] ||= url content_tag("a", name || url, , &block) end |