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.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Cloudinary image

Zoom pan, gen fill, restore, overlay, upscale, crop, resize...

Chain advanced transformations through a set of image and video APIs while optimizing assets by 90%.

Explore

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay