link_to_if/link_to_unless inconsistencies

52 vistas
Ir al primer mensaje no leído

Kevin Deisz

no leída,
5 nov 2015, 10:26:39 a.m.5/11/2015
para 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

no leída,
5 nov 2015, 10:54:39 a.m.5/11/2015
para 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

no leída,
5 nov 2015, 11:00:40 a.m.5/11/2015
para 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

no leída,
5 nov 2015, 11:18:28 a.m.5/11/2015
para 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

no leída,
5 nov 2015, 11:20:51 a.m.5/11/2015
para 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

no leída,
5 nov 2015, 4:29:07 p.m.5/11/2015
para 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
Responder a todos
Responder al autor
Reenviar
0 mensajes nuevos