diff --git a/app/controllers/family_memberships_controller.rb b/app/controllers/family_memberships_controller.rb
index 307cf5d4..e6d63ed3 100644
--- a/app/controllers/family_memberships_controller.rb
+++ b/app/controllers/family_memberships_controller.rb
@@ -4,17 +4,7 @@ class FamilyMembershipsController < ApplicationController
before_action :authenticate_user!
before_action :ensure_family_feature_enabled!
before_action :set_family
- before_action :set_membership, only: %i[show destroy]
-
- def index
- authorize @family, :show?
-
- @members = @family.members.includes(:family_membership)
- end
-
- def show
- authorize @membership, :show?
- end
+ before_action :set_membership, only: %i[destroy]
def destroy
authorize @membership
diff --git a/app/views/families/show.html.erb b/app/views/families/show.html.erb
index 3ab4bab5..1cbde3e1 100644
--- a/app/views/families/show.html.erb
+++ b/app/views/families/show.html.erb
@@ -51,10 +51,6 @@
<%= t('families.show.members_title', default: 'Family Members') %>
(<%= @members.count %>)
- <%= link_to family_members_path(@family),
- class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 text-sm font-medium" do %>
- <%= t('families.show.manage_members', default: 'Manage') %>
- <% end %>
diff --git a/app/views/family_memberships/index.html.erb b/app/views/family_memberships/index.html.erb
deleted file mode 100644
index 0743d298..00000000
--- a/app/views/family_memberships/index.html.erb
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
-
-
-
- Family Members
-
-
- Manage members of <%= @family.name %>
-
-
-
- <%= link_to family_path(@family),
- class: "bg-gray-200 hover:bg-gray-300 dark:bg-gray-600 dark:hover:bg-gray-500 text-gray-700 dark:text-gray-200 px-4 py-2 rounded-md font-medium transition-colors duration-200" do %>
- ← Back to Family
- <% end %>
-
-
-
-
-
-
-
- All Members (<%= @members.count %>)
-
-
-
-
- <% @members.each do |member| %>
-
-
-
-
-
-
-
- <%= member.email.first.upcase %>
-
-
-
-
-
-
-
- <%= member.email %>
-
-
- <% if member.family_membership.role == 'owner' %>
-
- Owner
-
- <% else %>
-
- <%= member.family_membership.role.humanize %>
-
- <% end %>
-
- <% if member == current_user %>
-
- You
-
- <% end %>
-
-
-
-
- Joined <%= member.family_membership.created_at.strftime('%B %d, %Y') %>
-
-
- <% if member.family_membership.role == 'owner' %>
-
- Created this family
-
- <% end %>
-
-
-
-
-
-
- <%= link_to family_member_path(@family, member.family_membership),
- class: "text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 text-sm font-medium" do %>
- View
- <% end %>
-
- <% if policy(member.family_membership).destroy? %>
- <% if !member.family_membership.owner? %>
- <%= link_to family_member_path(@family, member.family_membership),
- method: :delete,
- confirm: "Are you sure you want to remove #{member.email} from the family?",
- class: "text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300 text-sm font-medium" do %>
- Remove
- <% end %>
- <% end %>
- <% end %>
-
-
-
- <% end %>
-
-
-
-
-
-
-
-
-
-
- -
- Total Members
-
- -
- <%= @members.count %>
-
-
-
-
-
-
-
-
-
-
-
- -
- Active Members
-
- -
- <%= @members.count %>
-
-
-
-
-
-
-
-
-
-
-
- -
- Family Age
-
- -
- <%= time_ago_in_words(@family.created_at) %>
-
-
-
-
-
-
-
-
diff --git a/app/views/family_memberships/show.html.erb b/app/views/family_memberships/show.html.erb
deleted file mode 100644
index dfb5c192..00000000
--- a/app/views/family_memberships/show.html.erb
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
-
-
-
-
-
-
- <%= @membership.user.email.first.upcase %>
-
-
-
-
-
- <%= @membership.user.email %>
-
-
- <% if @membership.role == 'owner' %>
-
- Family Owner
-
- <% else %>
-
- <%= @membership.role.humanize %>
-
- <% end %>
-
- <% if @membership.user == current_user %>
-
- You
-
- <% end %>
-
-
-
-
-
- <%= link_to family_members_path(@family),
- class: "bg-gray-200 hover:bg-gray-300 dark:bg-gray-600 dark:hover:bg-gray-500 text-gray-700 dark:text-gray-200 px-4 py-2 rounded-md font-medium transition-colors duration-200" do %>
- ← All Members
- <% end %>
-
- <% if policy(@membership).destroy? && !@membership.owner? %>
- <%= link_to family_member_path(@family, @membership),
- method: :delete,
- confirm: "Are you sure you want to remove #{@membership.user.email} from the family?",
- class: "bg-red-600 hover:bg-red-700 dark:bg-red-500 dark:hover:bg-red-600 text-white px-4 py-2 rounded-md font-medium transition-colors duration-200" do %>
- Remove Member
- <% end %>
- <% end %>
-
-
-
-
-
-
-
-
-
- Basic Information
-
-
-
-
-
-
- Email Address
-
- - <%= @membership.user.email %>
-
-
-
-
-
- Family Role
-
- -
- <%= @membership.role.humanize %>
- <% if @membership.role == 'owner' %>
-
- - Can manage family settings and members
-
- <% end %>
-
-
-
-
-
-
- Joined Date
-
- -
- <%= @membership.created_at.strftime('%B %d, %Y at %I:%M %p') %>
-
-
-
-
-
-
- Time in Family
-
- -
- <%= time_ago_in_words(@membership.created_at) %>
-
-
-
-
-
-
-
-
- Family Information
-
-
-
-
-
-
- Family Name
-
- - <%= @family.name %>
-
-
-
-
-
- Family Creator
-
- - <%= @family.creator.email %>
-
-
-
-
-
- Family Created
-
- -
- <%= @family.created_at.strftime('%B %d, %Y') %>
-
-
-
-
-
-
- Total Members
-
- -
- <%= pluralize(@family.members.count, 'member') %>
-
-
-
-
-
-
-
-
-
- <% if @membership.owner? %>
-
-
-
-
-
- Family Owner Protection
-
-
-
- Family owners cannot remove their own membership. To leave the family, the owner must delete the entire family instead.
-
-
-
-
-
- <% end %>
-
-
- <% if @membership.user == current_user %>
-
-
-
-
-
- Your Membership
-
-
-
- This is your own membership. <% if @membership.owner? %>As the owner, you can delete the family to leave it.<% else %>You can leave the family at any time from the family page.<% end %>
-
-
-
- <%= link_to family_path(@family),
- class: "text-blue-800 hover:text-blue-900 dark:text-blue-200 dark:hover:text-blue-100 font-medium" do %>
- Go to Family Page →
- <% end %>
-
-
-
-
- <% end %>
-
-
-
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 23cc97a2..3807ac51 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -69,7 +69,7 @@ Rails.application.routes.draw do
post :accept
end
end
- resources :members, only: %i[index show destroy], controller: 'family_memberships'
+ resources :members, only: %i[destroy], controller: 'family_memberships'
end
# Public family invitation acceptance (no auth required)
diff --git a/spec/requests/family_memberships_spec.rb b/spec/requests/family_memberships_spec.rb
index b65e1041..d90bd7f8 100644
--- a/spec/requests/family_memberships_spec.rb
+++ b/spec/requests/family_memberships_spec.rb
@@ -15,70 +15,6 @@ RSpec.describe 'Family Memberships', type: :request do
sign_in user
end
- describe 'GET /families/:family_id/members' do
- it 'shows all family members' do
- get "/families/#{family.id}/members"
- expect(response).to have_http_status(:ok)
- end
-
- context 'when user is not in the family' do
- let(:outsider) { create(:user) }
-
- before { sign_in outsider }
-
- it 'redirects to families index' do
- get "/families/#{family.id}/members"
- expect(response).to redirect_to(families_path)
- end
- end
-
- context 'when not authenticated' do
- before { sign_out user }
-
- it 'redirects to login' do
- get "/families/#{family.id}/members"
- expect(response).to redirect_to(new_user_session_path)
- end
- end
- end
-
- describe 'GET /families/:family_id/members/:id' do
- it 'shows a specific membership' do
- get "/families/#{family.id}/members/#{member_membership.id}"
- expect(response).to have_http_status(:ok)
- end
-
- context 'when membership does not belong to the family' do
- let(:other_family) { create(:family) }
- let(:other_membership) { create(:family_membership, family: other_family) }
-
- it 'returns not found' do
- get "/families/#{family.id}/members/#{other_membership.id}"
- expect(response).to have_http_status(:not_found)
- end
- end
-
- context 'when user is not in the family' do
- let(:outsider) { create(:user) }
-
- before { sign_in outsider }
-
- it 'redirects to families index' do
- get "/families/#{family.id}/members/#{member_membership.id}"
- expect(response).to redirect_to(families_path)
- end
- end
-
- context 'when not authenticated' do
- before { sign_out user }
-
- it 'redirects to login' do
- get "/families/#{family.id}/members/#{member_membership.id}"
- expect(response).to redirect_to(new_user_session_path)
- end
- end
- end
-
describe 'DELETE /families/:family_id/members/:id' do
context 'when removing a regular member' do
it 'removes the member from the family' do
@@ -170,23 +106,6 @@ RSpec.describe 'Family Memberships', type: :request do
end
end
- context 'when member views another member' do
- before { sign_in member_user }
-
- it 'allows viewing membership' do
- get "/families/#{family.id}/members/#{owner_membership.id}"
- expect(response).to have_http_status(:ok)
- end
- end
-
- context 'when member views members list' do
- before { sign_in member_user }
-
- it 'allows viewing members list' do
- get "/families/#{family.id}/members"
- expect(response).to have_http_status(:ok)
- end
- end
end
describe 'member removal workflow' do
diff --git a/spec/requests/family_workflows_spec.rb b/spec/requests/family_workflows_spec.rb
index bf448b9f..4832d20f 100644
--- a/spec/requests/family_workflows_spec.rb
+++ b/spec/requests/family_workflows_spec.rb
@@ -79,12 +79,9 @@ RSpec.describe 'Family Workflows', type: :request do
expect(user3.reload.family).to eq(family)
expect(family.reload.members.count).to eq(3)
- # Step 6: Family owner views and manages members
+ # Step 6: Family owner views members on family show page
sign_in user1
- get "/families/#{family.id}/members"
- expect(response).to have_http_status(:ok)
-
- get "/families/#{family.id}/members/#{user2.family_membership.id}"
+ get "/families/#{family.id}"
expect(response).to have_http_status(:ok)
# Step 7: Owner removes a member
@@ -257,9 +254,6 @@ RSpec.describe 'Family Workflows', type: :request do
sign_in user3
get "/families/#{family.id}"
expect(response).to redirect_to(families_path)
-
- get "/families/#{family.id}/members"
- expect(response).to redirect_to(families_path)
end
end