I'd guess that it's because while the body is typically simple (a string or variable), the second argument can also be a bunch of params for url_for:
link_to 'thingy', :controller => 'wat', :action => 'huh', :protocol => 'wtf'
--Matt Jones
I'd guess that it's because while the body is typically simple (a string or variable), the second argument can also be a bunch of params for url_for:
link_to 'thingy', :controller => 'wat', :action => 'huh', :protocol => 'wtf'
--Matt Jones
@Matt jones
I’d guess that it’s because while the body is typically simple (a string or variable), the second argument can also be a bunch of params for url_for:
link_to ‘thingy’, :controller => ‘wat’, :action => ‘huh’, :protocol => ‘wtf’
There are 4 signatures for the link_to helper method:
link_to(body, url, html_options = {}) link_to(body, url_options = {}, html_options = {}) link_to(options = {}, html_options = {}) link_to(url, html_options = {})
Your example would fit the second signature, which has no url argument, but a url_options hash instead. This is fine, options always go at the end of a method call.
The first signature is the one that bothers me.
@Zamith
link_to url: @person, body: “Click me”
I thought of that one too, but it’s almost just as ugly as
link_to “Click me”, @person
Another reason why it bothers me, is that the body can also be given as a block, in which case, tho body goes at the very end of the method call and the url at the beginning. So in case of a block-given body, the order is just reversed:
link_to @person do “Click me” end
Not very consistent, he?
You can always use
link_to @person { “Click me” }
if you find that infinitely more readable than
link_to “Click me”, @person
without the need to introduce a backwards incompatible change that would break every Rails app ever written.
It's ultimately a matter of symmetry, especially when switching from a hash to a URL helper:
link_to 'something', :controller => 'posts', :action => 'show', :id => id
becomes:
link_to 'something', post_path(id)
Requiring that the arguments trade positions between those two lines would be seriously annoying.
BTW, the bikeshed should TOTALLY be painted blue.
--Matt Jones