link_to_if/link_to_unless inconsistencies

52 views
Skip to first unread message

Kevin Deisz

unread,
Nov 5, 2015, 10:26:39 AM11/5/15
to Ruby on Rails: Core
Hi there,

Seems like in the positive condition, link_to_if and link_to_unless are inconsistent. When I send a block to link_to (or for that matter anything else that calls content_tag) the block is used to determine the content in the case that "name" is not provided. It gets around this by shifting the args, effectively, as in (html_options, options, name = options, name, block if block_given?). 

However, with link_to_if/link_to_unless, when the condition is met it always uses the main content. As in:

link_to_if(true, root_path) do
  My Link <%= some_helper %>
end

looks like "/" in the UI and the block is ignored. I'd love to fix this, but want to make sure there isn't some good reason first.

Thanks.

Rafael Mendonça França

unread,
Nov 5, 2015, 10:54:39 AM11/5/15
to Ruby on Rails: Core
It is the way they work. See the documentation. The block is used only when the condition is not met.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-co...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Kevin Deisz

unread,
Nov 5, 2015, 11:00:40 AM11/5/15
to rubyonra...@googlegroups.com
I get that that's the way that it works, my point was that it's inconsistent. Right now you can't achieve the normal link_to behavior when the condition is met. We can preserve the behavior for the negative case and still get the content_tag block benefit for the positive case.
--
Kevin D. Deisz
DrugDev TrialNetworks
Senior Software Engineer

Rafael Mendonça França

unread,
Nov 5, 2015, 11:18:28 AM11/5/15
to rubyonra...@googlegroups.com
If that is possible without breaking backward compatibility go ahead, but I can't think in a way to make it backward compatible.

Kevin Deisz

unread,
Nov 5, 2015, 11:20:51 AM11/5/15
to rubyonra...@googlegroups.com
It would necessarily break backward compatibility with the positive condition, but that's the point that I'm making. If it's not going to be accepted that's fine, I was just hoping to understand why.

Matt Jones

unread,
Nov 5, 2015, 4:29:07 PM11/5/15
to rubyonrails-core
In this use case, how would one specify the content to be used if the condition is `false`?

I can't think of a way that isn't clunkier than the plain ERB way to accomplish the same thing:

<% if condition %>
  <%= link_to foo_path do %>
    Content for true
  <% end %>
<% else %>
  Content for false
<% end %>

IMO, `link_to_if` and `link_to_unless` are intended to capture a common pattern that would otherwise lead to repeated strings / code. If you need a behavior that's well outside of that pattern, just write ERB / helpers / etc.

--Matt Jones
Reply all
Reply to author
Forward
0 new messages