DEV Community

Rails Designer
Rails Designer

Posted on • Originally published at railsdesigner.com

2

Rails link_to_if and link_to_unless

This article was originally published on Rails Designer


Rails is packed with nifty, small helpers that help you not reinvent the wheel. Every once in a while you remember one that you are sure some of you are not known with.

Today and I want to quickly go over: link_to_if and link_to_unless.

They both act the same as the, probably, known link_to helper, but, as you guessed, allow a conditional.

Basics

The syntax for link_to_if looks like this:

link_to_if(condition, name, options = {}, html_options = {}, &block)
Enter fullscreen mode Exit fullscreen mode

Or with actual values:

<%= link_to_if(Current.user.present?, "Profile", profile_path) %>
Enter fullscreen mode Exit fullscreen mode

This will, if Current.user.present? returns true, render a typical link_to, but if it returns false it will return just the text Profile.

link_to_unless accepts the same attributes, but does the opposite. Take this example:

<%= link_to_unless(current_page?(home_path), "Home", home_path) %>
Enter fullscreen mode Exit fullscreen mode

This will render a typical link_to unless current_page?(home_path) returns true. You can imagine this is useful in navigations.

Tweak the conditional render

You can also tweak what (if anything) is rendered when the conditional is (not) met. Like so:

<%= link_to_if(Current.user.has_role?(:admin), "Manage Users", admin_users_path) do %>
  <div>
    <p>You need to be an admin to manage users.</p>

    <p>If you believe this is an error, please contact support.</p>
  </div>
<% end %>
Enter fullscreen mode Exit fullscreen mode

I have used this to show links to features a certain account/user didn't have access to, but then show a modal for an upsell. Works great.

<%= link_to_if(Feature.enabled?(:ai_access), "Add AI Magic", setting_ai_path) do %>
  <%= link_to "Add AI Magic", upsell_path(highlight: "ai"), data: {turbo_frame: "modal"} %>
<% end %>
Enter fullscreen mode Exit fullscreen mode

And that's it. Yet another small, but useful little helper in Rails.

Billboard image

Imagine monitoring that's actually built for developers

Join Vercel, CrowdStrike, and thousands of other teams that trust Checkly to streamline monitor creation and configuration with Monitoring as Code.

Start Monitoring

Top comments (0)

Heroku

This site is powered by Heroku

Heroku was created by developers, for developers. Get started today and find out why Heroku has been the platform of choice for brands like DEV for over a decade.

Sign Up

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay