DEV Community

Alef Ojeda de Oliveira
Alef Ojeda de Oliveira

Posted on

Rails Helper Link: "link_to_if and link_to_unless"

Exploring the link_to_if and link_to_unless Helpers in Rails

The link_to_if and link_to_unless helpers in Ruby on Rails are valuable tools for conditionally generating links in your application. They help avoid unnecessary if/else structures, making the code cleaner and more readable.

link_to_if

The link_to_if helper creates a link only if the provided condition is true; otherwise, it renders the specified alternative content.

Example:

<%= link_to_if user_signed_in?, "Profile", profile_path, class: "btn btn-primary" %>
Enter fullscreen mode Exit fullscreen mode

If the user is logged in, the link to the profile will be generated. Otherwise, only the text "Profile" will be displayed without being a link.

We can customize the content when the condition is false:

<%= link_to_if user_signed_in?, "Profile", profile_path do %>
  <span class="text-muted">Log in to view the profile</span>
<% end %>
Enter fullscreen mode Exit fullscreen mode

link_to_unless

The link_to_unless helper does the opposite of link_to_if: it creates a link only if the condition is false. If the condition is true, it displays the content normally.

Example:

<%= link_to_unless admin?, "Request Access", request_access_path %>
Enter fullscreen mode Exit fullscreen mode

If the user is not an administrator, a link to "Request Access" will be generated. If the user is an administrator, the text will be displayed normally, without being a link.

Similarly to link_to_if, we can customize the alternative content:

<%= link_to_unless admin?, "Request Access", request_access_path do %>
  <span class="text-muted">You already have administrator access</span>
<% end %>
Enter fullscreen mode Exit fullscreen mode

Conclusion

These helpers are very useful for simplifying the logic of displaying links in Rails applications, avoiding the need for if/else blocks in the template. This makes the code more elegant and easier to maintain.

Did you like the tip? Share it with other developers! 🚀

Top comments (0)