forem/forem · error · StandardError
You cannot merge the same two user IDs
Error message
You cannot merge the same two user IDs
What it means
Moderator::MergeUsers service raises StandardError ('You cannot merge the same two user IDs') when the user to be deleted (@delete_user, looked up from delete_user_id) has the same id as keep_user. The guard exists because merging an account into itself would run identity/content merges against the same row and then send it through Users::DeleteWorker, destroying the surviving account.
Source
Thrown at app/services/moderator/merge_user.rb:16
module Moderator
class MergeUser < ManageActivityAndRoles
def self.call(admin:, keep_user:, delete_user_id:)
new(keep_user: keep_user, admin: admin, delete_user_id: delete_user_id).merge
end
attr_reader :keep_user, :admin, :delete_user_id
def initialize(admin:, keep_user:, delete_user_id:)
@keep_user = keep_user
@admin = admin
@delete_user = User.find(delete_user_id.to_i)
end
def merge
raise StandardError, I18n.t("services.moderator.merge_user.same_user") if @delete_user.id == @keep_user.id
handle_identities
merge_content
merge_follows
merge_mentions
merge_profile
update_social
# The merged-away row is deleted, but this is a merge, not a GDPR
# erasure — MLH Core merges the two accounts instead of erasing one.
Users::DeleteWorker.new.perform(@delete_user.id, true, "merge")
@keep_user.touch(:profile_updated_at)
@keep_user.track!("user_merged", { "merged_forem_user_id" => @delete_user.id })
Users::MergeSyncWorker.perform_async(@keep_user.id)
EdgeCache::Bust.call("/#{@keep_user.username}")
end
privateView on GitHub (pinned to f354c376a7)
Solutions
- Double-check the two IDs are distinct before submitting the merge (they are different accounts).
- If you meant to merge, re-run with the correct delete_user_id.
- Add a UI/caller-side precondition: raise/flash early when params[:keep_user_id] == params[:delete_user_id].
Example fix
# before
Moderator::MergeUsers.call(admin: admin, keep_user: user, delete_user_id: user.id)
# raises 'You cannot merge the same two user IDs'
# after
if keep_user.id == delete_user_id.to_i
Rails.logger.info('Self-merge requested; nothing to do')
else
Moderator::MergeUsers.call(admin: admin, keep_user: keep_user, delete_user_id: delete_user_id)
end Defensive patterns
Strategy: validation
Validate before calling
if keep_user.id == delete_user_id.to_i
render json: { error: 'Cannot merge a user into itself' }, status: :unprocessable_entity
end Try / catch
rescue StandardError => e flash[:error] = e.message # surfaces 'You cannot merge the same two user IDs' redirect_to admin_merge_path end
Prevention
- Validate distinct IDs in the merge UI before submit.
- In scripted merges, skip self-pairs instead of relying on the service to raise.
- Log both user handles for the audit trail when the guard fires.
When it happens
Trigger: An admin submits the user-merge form (or calls Moderator::MergeUsers.call) with the same user id in both the 'keep' and 'delete' fields; also when delete_user_id is passed as a string that to_i's to the same id.
Common situations: Copy-paste error in the /admin merge UI filling both inputs with one id; scripts that loop over user pairs and hit a self-pair; support workflows where the two disputed accounts turned out to be one account.
Related errors
- The user being deleted already has two or more authenticatio
- The user has duplicate authentication methods on the two acc
- Invalid Asciinema ID: %{id}
- You need super admin status to take this action
- Please choose a badge to award
AI-assisted analysis of forem/forem@f354c376a7 (2026-08-21).
Data as JSON: /api/errors/0d3d00a967e189b7.
Report an issue: GitHub.