From c4f388f4684d1e9c1d0681c4cb6fb480d6d7d7ca Mon Sep 17 00:00:00 2001 From: Morgan Roderick Date: Mon, 12 Oct 2026 18:44:15 +0200 Subject: [PATCH] chore(members): ignore the dead unsubscribed column The members.unsubscribed boolean has been dead since 2014. The only read, a default_scope on Member, was removed in 59df6c1c (2014-06-22). The only write, the MembersController#unsubscribe action, was removed in 0cdd988a (2014-08-24) when the action became a token-based redirect to the subscriptions page. Ignore the column before dropping it. Old releases build their member SELECT list from their schema cache and name every column explicitly, so a drop while old dynos still serve under Heroku preboot would fail every member query on them. The column itself is removed with a safety_assured remove_column in a separate deploy. Part of #3007. --- app/models/member.rb | 2 +- spec/models/member_spec.rb | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/models/member.rb b/app/models/member.rb index d98ca4c1f..04463bccb 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -1,5 +1,5 @@ class Member < ApplicationRecord - self.ignored_columns += ['can_log_in'] + self.ignored_columns += %w[can_log_in unsubscribed] include DigestHelper diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index afbab0795..6a4d6b64f 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -321,4 +321,10 @@ expect(managers.size).to eq(managers.distinct.size) end end + + describe 'legacy columns' do + it 'does not expose the legacy unsubscribed attribute' do + expect(described_class.new).not_to respond_to(:unsubscribed) + end + end end