Search code examples
ruby-on-railslink-to

Conditional link_to_if name parameter always evaluated?


I had an impression that link_to_if should work with this code without any problem:

<%= link_to_if locker.student, locker.student.fullname, locker.student do %>
  <div>more complicated</div>
<% end %>

I am getting a no method error on "fullname". So, my impression was that when student exists, link will be created, otherwise block will be rendered.

However, it seems like name parameter is always executed, regardless the if condition, so it simply breaks when there is no student on locker. Is this true?

If yes (weird), how can i do something like this? What i want is to avoid a standard if.else.

Thx


Solution

  • Yes its always executed: its an argument of the function.

    You could do:

    <%= link_to_if locker.student, locker.student.try(:fullname), locker.student do %>
      <div>more complicated</div>
    <% end %>
    

    Or use a standard if wrapping the link_to

    Elegant ways to avoid these problems are null objects and/or decorators