Search code examples
ruby-on-railshyperlinkhidelink-to

Rails link_to_if not hiding links correctly


For some reason my link_to_if line works, but appears on every show view for my model (Company).

Here's the code:

<% @customers.each do |customer| %>
  <li>
    <%= link_to_if customer.company_id == @company.id, "#{customer.first_name} #{customer.last_name}", customer_path(customer[:id]) %>
  </li>
<% end %>

The issue: I have Customer1 linked to CompanyX. When I go to CompanyZ it shows Customer1, but the link is not a hyperlink. it's just plaintext, and not even supposed to be showing up. However on CompanyX's view, the link works fine. What am I doing wrong here?


Solution

  • If you read the documentation of link_to_if (https://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if), it clearly says that [if false] only the name is returned.

    In the doc you can find that the (optional) block given is rendered in the false case. So in your case you could pass it an empty block:

    <%= link_to_if false, customer_path(customer[:id]) {} %>
    

    In my opinion, if you want to display the link only if one or more customer(s) from @customers are associated to that @company, you should do it this way:

    <% @customers.where(company_id: @company.id).each do |customer| %>
      <li>
        <%= link_to "#{customer.first_name} #{customer.last_name}", customer_path(customer[:id]) %>
      </li>
    <% %>