Posted on • Originally published atrailsdesigner.com
Rails link_to_if and link_to_unless
This article was originally published onRails 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
andlink_to_unless
.
They both act the same as the, probably, knownlink_to
helper, but, as you guessed, allow a conditional.
Basics
The syntax forlink_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, ifCurrent.user.present?
returns true, render a typicallink_to
, but if it returnsfalse
it will return just the textProfile.
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 typicallink_to
unlesscurrent_page?(home_path)
returns true. You can imagine this is useful innavigations.
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)
For further actions, you may consider blocking this person and/orreporting abuse