]> cat aescling's git repositories - mastodon.git/commitdiff
Fix duplicate record on admin/accounts when searching with IP (#17150)
authorJeong Arm <kjwonmail@gmail.com>
Mon, 20 Dec 2021 23:17:14 +0000 (08:17 +0900)
committerGitHub <noreply@github.com>
Mon, 20 Dec 2021 23:17:14 +0000 (00:17 +0100)
app/models/user.rb

index c4dec48133989b103d9acd009c48f6627797a171..374b82d05dfd965229484ed75a18bf432dc2113a 100644 (file)
@@ -107,7 +107,7 @@ class User < ApplicationRecord
   scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) }
   scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended_at: nil }) }
   scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) }
-  scope :matches_ip, ->(value) { left_joins(:session_activations).where('users.current_sign_in_ip <<= ?', value).or(left_joins(:session_activations).where('users.sign_up_ip <<= ?', value)).or(left_joins(:session_activations).where('users.last_sign_in_ip <<= ?', value)).or(left_joins(:session_activations).where('session_activations.ip <<= ?', value)) }
+  scope :matches_ip, ->(value) { where('current_sign_in_ip <<= ?', value).or(where('users.sign_up_ip <<= ?', value)).or(where('users.last_sign_in_ip <<= ?', value)).or(where(id: SessionActivation.select(:user_id).where('ip <<= ?', value))) }
   scope :emailable, -> { confirmed.enabled.joins(:account).merge(Account.searchable) }
 
   before_validation :sanitize_languages