T. Cole
T. Cole

Reputation: 191

Good practice for rendering partials based on multiple conditions?

I need to be able to render multiple different layouts based on user privileges. I have groups that have one owner and many members. I also have a large number of users who may or may not be in a group. If I have a group, how do I render a different layout to the group owner, a group member, or a non-member user?

I don't want to use an authorization gem for this

I was thinking something like this:

<% if current_user == @group.owner %>
  <% render partial_1 %>
<% elsif current_user == @group.member && != @group.owner %>
  <% render partial_2 %>
<% else %>
  <%render partial %>
<% end %>

Is this ineffective? Inefficient? Is there a best/better practice for this?

Upvotes: 1

Views: 68

Answers (1)

Matt
Matt

Reputation: 14048

It's essentially fine, you don't need to check that the user isn't the owner after checking whether they are, and assuming users can have many groups and groups can have many members you'll need to check inclusion of one or the other, rather than group.member (@group.members.include?(current_user) would work, but I've suggested the opposite below, either are fine.

<% if current_user == @group.owner %>
  <% render partial_1 %>
<% elsif current_user.groups.include?(@group) %>
  <% render partial_2 %>
<% else %>
  <% render partial %>
<% end %>

Upvotes: 1

Related Questions