diff --git a/app/models/family.rb b/app/models/family.rb index 948930ff..9c9260f9 100644 --- a/app/models/family.rb +++ b/app/models/family.rb @@ -15,8 +15,8 @@ class Family < ApplicationRecord scope :with_pending_invitations, -> { includes(family_invitations: :invited_by) } def can_add_members? - # Use counter cache if available, otherwise count - member_count < MAX_MEMBERS + # Check if family can accept more members (including pending invitations) + (member_count + pending_invitations_count) < MAX_MEMBERS end def member_count @@ -40,7 +40,7 @@ class Family < ApplicationRecord end def full? - member_count >= MAX_MEMBERS + (member_count + pending_invitations_count) >= MAX_MEMBERS end def active_invitations diff --git a/app/models/family_invitation.rb b/app/models/family_invitation.rb index 6b3ff839..1e0d65b2 100644 --- a/app/models/family_invitation.rb +++ b/app/models/family_invitation.rb @@ -17,7 +17,8 @@ class FamilyInvitation < ApplicationRecord before_validation :generate_token, :set_expiry, on: :create - # Clear family cache when invitation status changes + # Clear family cache when invitation status changes or is created/destroyed + after_create :clear_family_cache after_update :clear_family_cache, if: :saved_change_to_status? after_destroy :clear_family_cache diff --git a/app/views/families/show.html.erb b/app/views/families/show.html.erb index 4a44f6d5..b4060867 100644 --- a/app/views/families/show.html.erb +++ b/app/views/families/show.html.erb @@ -121,7 +121,7 @@ <% end %> - <% if policy(@family).invite? %> + <% if policy(@family).invite? && @family.can_add_members? %>
+ Your family has reached the maximum of <%= @family.class::MAX_MEMBERS %> members (including pending invitations). + Cancel existing invitations or wait for them to expire to invite new members. +
+