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)
Or with actual values:
<%= link_to_if(Current.user.present?, "Profile", profile_path) %>
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) %>
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 %>
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 %>
And that's it. Yet another small, but useful little helper in Rails.
Top comments (0)