Module ActionView::Helpers::UrlHelper
In: vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb

Provides a set of methods for making easy links and getting urls that depend on the controller and action. This means that you can use the same format for links in the views that you do in the controller. The different methods are even named synchronously, so link_to uses that same url as is generated by url_for, which again is the same url used for redirection in redirect_to.

Methods

Public Instance methods

Generates a form containing a sole button that submits to the URL given by options. Use this method instead of link_to for actions that do not have the safe HTTP GET semantics implied by using a hypertext link.

The parameters are the same as for link_to. Any html_options that you pass will be applied to the inner input element. In particular, pass

  :disabled => true/false

as part of html_options to control whether the button is disabled. The generated form element is given the class ‘button-to’, to which you can attach CSS styles for display purposes.

Example 1:

  # inside of controller for "feeds"
  button_to "Edit", :action => 'edit', :id => 3

Generates the following HTML (sans formatting):

  <form method="post" action="/feeds/edit/3" class="button-to">
    <div><input value="Edit" type="submit" /></div>
  </form>

Example 2:

  button_to "Destroy", { :action => 'destroy', :id => 3 },
            :confirm => "Are you sure?"

Generates the following HTML (sans formatting):

  <form method="post" action="/feeds/destroy/3" class="button-to">
    <div><input onclick="return confirm('Are you sure?');"
                value="Destroy" type="submit" />
    </div>
  </form>

NOTE: This method generates HTML code that represents a form. Forms are "block" content, which means that you should not try to insert them into your HTML where only inline content is expected. For example, you can legally insert a form inside of a div or td element or in between p elements, but not in the middle of a run of text, nor can you place a form within another form. (Bottom line: Always validate your HTML before going public.)

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 84
84:       def button_to(name, options = {}, html_options = nil)
85:         html_options = (html_options || {}).stringify_keys
86:         convert_boolean_attributes!(html_options, %w( disabled ))
87:         convert_confirm_option_to_javascript!(html_options)
88:         url, name = options.is_a?(String) ? 
89:           [ options,  name || options ] :
90:           [ url_for(options), name || url_for(options) ]
91:         html_options.merge!("type" => "submit", "value" => name)
92:         "<form method=\"post\" action=\"#{h url}\" class=\"button-to\"><div>" +
93:           tag("input", html_options) + "</div></form>"
94:       end

Returns true if the current page uri is generated by the options passed (in url_for format).

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 215
215:       def current_page?(options)
216:         url_for(options) == @request.request_uri
217:       end

This tag is deprecated. Combine the link_to and AssetTagHelper::image_tag yourself instead, like:

  link_to(image_tag("rss", :size => "30x45", :border => 0), "http://www.example.com")

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 99
 99:       def link_image_to(src, options = {}, html_options = {}, *parameters_for_method_reference)
100:         image_options = { "src" => src.include?("/") ? src : "/images/#{src}" }
101:         image_options["src"] += ".png" unless image_options["src"].include?(".")
102: 
103:         html_options = html_options.stringify_keys
104:         if html_options["alt"]
105:           image_options["alt"] = html_options["alt"]
106:           html_options.delete "alt"
107:         else
108:           image_options["alt"] = src.split("/").last.split(".").first.capitalize
109:         end
110: 
111:         if html_options["size"]
112:           image_options["width"], image_options["height"] = html_options["size"].split("x")
113:           html_options.delete "size"
114:         end
115: 
116:         if html_options["border"]
117:           image_options["border"] = html_options["border"]
118:           html_options.delete "border"
119:         end
120: 
121:         if html_options["align"]
122:           image_options["align"] = html_options["align"]
123:           html_options.delete "align"
124:         end
125: 
126:         link_to(tag("img", image_options), options, html_options, *parameters_for_method_reference)
127:       end

Creates a link tag of the given name using an URL created by the set of options. See the valid options in classes/ActionController/Base.html#M000021. It’s also possible to pass a string instead of an options hash to get a link tag that just points without consideration. If nil is passed as a name, the link itself will become the name. The html_options have a special feature for creating javascript confirm alerts where if you pass :confirm => ‘Are you sure?’, the link will be guarded with a JS popup asking that question. If the user accepts, the link is processed, otherwise not.

Example:

  link_to "Delete this page", { :action => "destroy", :id => @page.id }, :confirm => "Are you sure?"

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 23
23:       def link_to(name, options = {}, html_options = nil, *parameters_for_method_reference)
24:         html_options = (html_options || {}).stringify_keys
25:         convert_confirm_option_to_javascript!(html_options)
26:         if options.is_a?(String)
27:           content_tag "a", name || options, (html_options || {}).merge("href" => options)
28:         else
29:           content_tag(
30:             "a", name || url_for(options, *parameters_for_method_reference),
31:             (html_options || {}).merge("href" => url_for(options, *parameters_for_method_reference))
32:           )
33:         end
34:       end

Create a link tag of the given name using an URL created by the set of options, if condition is true, in which case only the name is returned (or the given block is yielded, if one exists).

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 155
155:       def link_to_if(condition, name, options = {}, html_options = {}, *parameters_for_method_reference, &block)
156:         link_to_unless !condition, name, options, html_options, *parameters_for_method_reference, &block
157:       end
link_to_image(src, options = {}, html_options = {}, *parameters_for_method_reference)

Alias for link_image_to

Create a link tag of the given name using an URL created by the set of options, unless condition is true, in which case only the name is returned (or the given block is yielded, if one exists).

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 141
141:       def link_to_unless(condition, name, options = {}, html_options = {}, *parameters_for_method_reference, &block)
142:         if condition
143:           if block_given?
144:             block.arity <= 1 ? yield(name) : yield(name, options, html_options, *parameters_for_method_reference)
145:           else
146:             name
147:           end
148:         else
149:           link_to(name, options, html_options, *parameters_for_method_reference)
150:         end  
151:       end

Creates a link tag of the given name using an URL created by the set of options, unless the current request uri is the same as the link’s, in which case only the name is returned (or the given block is yielded, if one exists). This is useful for creating link bars where you don’t want to link to the page currently being viewed.

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 135
135:       def link_to_unless_current(name, options = {}, html_options = {}, *parameters_for_method_reference, &block)
136:         link_to_unless current_page?(options), name, options, html_options, *parameters_for_method_reference, &block
137:       end

Creates a link tag for starting an email to the specified email_address, which is also used as the name of the link unless name is specified. Additional HTML options, such as class or id, can be passed in the html_options hash.

You can also make it difficult for spiders to harvest email address by obfuscating them. Examples:

  mail_to "me@domain.com", "My email", :encode => "javascript"  # =>
    <script type="text/javascript" language="javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script>

  mail_to "me@domain.com", "My email", :encode => "hex"  # =>
    <a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d">My email</a>

You can also specify the cc address, bcc address, subject, and body parts of the message header to create a complex e-mail using the corresponding cc, bcc, subject, and body html_options keys. Each of these options are URI escaped and then appended to the email_address before being output. Be aware that javascript keywords will not be escaped and may break this feature when encoding with javascript. Examples:

  mail_to "me@domain.com", "My email", :cc => "ccaddress@domain.com", :bcc => "bccaddress@domain.com", :subject => "This is an example email", :body => "This is the body of the message."   # =>
    <a href="mailto:me@domain.com?cc="ccaddress@domain.com"&bcc="bccaddress@domain.com"&body="This%20is%20the%20body%20of%20the%20message."&subject="This%20is%20an%20example%20email">My email</a>

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 177
177:       def mail_to(email_address, name = nil, html_options = {})
178:         html_options = html_options.stringify_keys
179:         encode = html_options.delete("encode")
180:         cc, bcc, subject, body = html_options.delete("cc"), html_options.delete("bcc"), html_options.delete("subject"), html_options.delete("body")
181: 
182:         string = ''
183:         extras = ''
184:         extras << "cc=#{CGI.escape(cc).gsub("+", "%20")}&" unless cc.nil?
185:         extras << "bcc=#{CGI.escape(bcc).gsub("+", "%20")}&" unless bcc.nil?
186:         extras << "body=#{CGI.escape(body).gsub("+", "%20")}&" unless body.nil?
187:         extras << "subject=#{CGI.escape(subject).gsub("+", "%20")}&" unless subject.nil?
188:         extras = "?" << extras.gsub!(/&?$/,"") unless extras.empty?
189: 
190:         email_address_obfuscated = email_address.dup
191:         email_address_obfuscated.gsub!(/@/, html_options.delete("replace_at")) if html_options.has_key?("replace_at")
192:         email_address_obfuscated.gsub!(/\./, html_options.delete("replace_dot")) if html_options.has_key?("replace_dot")
193: 
194:         if encode == 'javascript'
195:           tmp = "document.write('#{content_tag("a", name || email_address, html_options.merge({ "href" => "mailto:"+email_address.to_s+extras }))}');"
196:           for i in 0...tmp.length
197:             string << sprintf("%%%x",tmp[i])
198:           end
199:           "<script type=\"text/javascript\" language=\"javascript\">eval(unescape('#{string}'))</script>"
200:         elsif encode == 'hex'
201:           for i in 0...email_address.length
202:             if email_address[i,1] =~ /\w/
203:               string << sprintf("%%%x",email_address[i])
204:             else
205:               string << email_address[i,1]
206:             end
207:           end
208:           content_tag "a", name || email_address_obfuscated, html_options.merge({ "href" => "mailto:#{string}#{extras}" })
209:         else
210:           content_tag "a", name || email_address_obfuscated, html_options.merge({ "href" => "mailto:#{email_address}#{extras}" })
211:         end
212:       end

Returns the URL for the set of options provided. This takes the same options as url_for. For a list, see the url_for documentation in classes/ActionController/Base.html#M000079.

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/url_helper.rb, line 10
10:       def url_for(options = {}, *parameters_for_method_reference)
11:         options = { :only_path => true }.update(options.symbolize_keys) if options.kind_of? Hash
12:         @controller.send(:url_for, options, *parameters_for_method_reference)
13:       end

[Validate]