Search code examples
ruby-on-railslink-to

Rails: How can I show a block with or without a link based on a condition (link_to_if)


I have a complex block of tags (<h3>, <p>, ...) that I want to render with a link or without a link around it based on a condition.

I know about link_to_if that works like that:

<% link_to_if condition, name, path %>

if the condition is false only the name will be rendered.

And I know about the link_to with &block:

<% link_to path do %>
  [complex content]
<% end %>

I want a combination of both. A link_to_if statement that accepts a &block, so that the block will be rendered without a link around it, if the condition is false. Unfortunately the link_to_if statement with a &block works not like the link_to statement :(

Does anyone have suggestion for me? Any help is highly appreciated


Solution

  • I wrote my own helper for this:

       def link_to_if_with_block condition, options, html_options={}, &block
         if condition
           link_to options, html_options, &block
         else
           capture &block
         end
       end
    

    You can use it like this:

    <%= link_to_if_with_block true, new_model_path { "test" } %>
    <%= link_to_if_with_block true, new_model_path do %>
      Something more complicated
    <% end %>