diff --git a/app/models/event.rb b/app/models/event.rb index 192d72a07..f0cdf72fc 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -208,23 +208,23 @@ def rsvp_for_user(user) end def no_rsvp?(user) - !rsvps.where(user_id: user.id).any? + user.event_role(self).blank? end def student?(user) - student_rsvps.where(user_id: user.id).any? + user.event_role(self) == Role::STUDENT end def waitlisted_student?(user) - student_waitlist_rsvps.where(user_id: user.id).any? + student?(user) && user.event_attendances[id][:waitlist_position].present? end def volunteer?(user) - volunteer_rsvps.where(user_id: user.id).any? + user.event_role(self) == Role::VOLUNTEER end def organizer?(user) - organizer_rsvps.where(user_id: user.id).any? + user.event_role(self) == Role::ORGANIZER end def checkiner?(user) diff --git a/app/models/user.rb b/app/models/user.rb index df7203c15..688b42ad8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -59,6 +59,19 @@ def meetup_id authentications.find { |a| a.provider == 'meetup' }.try(:uid) end + def event_attendances + @event_attendances ||= rsvps.each_with_object({}) do |rsvp, hsh| + hsh[rsvp.event_id] = { + role: rsvp.role, + waitlist_position: rsvp.waitlist_position + } + end + end + + def event_role(event) + event_attendances.fetch(event.id, {})[:role] + end + private def make_empty_profile