Sync AuthUser and User names
Callbacks are handy for this!
This commit is contained in:
parent
75185de957
commit
eee097a9f8
2 changed files with 26 additions and 1 deletions
|
@ -8,7 +8,23 @@ class AuthUser < AuthRecord
|
||||||
validates :name, presence: true, uniqueness: {case_sensitive: false},
|
validates :name, presence: true, uniqueness: {case_sensitive: false},
|
||||||
length: {maximum: 20}
|
length: {maximum: 20}
|
||||||
|
|
||||||
after_create do
|
has_one :user, foreign_key: :remote_id, inverse_of: :auth_user
|
||||||
|
|
||||||
|
# It's important to keep AuthUser and User in sync. When we create an AuthUser
|
||||||
|
# (e.g. through the registration process), we create a matching User, too. And
|
||||||
|
# when the AuthUser's name changes, we update User to match.
|
||||||
|
#
|
||||||
|
# TODO: Should we sync deletions too? We don't do deletions anywhere in app
|
||||||
|
# right now, so I'll hold off to avoid leaving dead code around.
|
||||||
|
after_create :create_user
|
||||||
|
after_update :sync_name_with_user, if: :saved_change_to_name?
|
||||||
|
|
||||||
|
def create_user
|
||||||
User.create(name: name, auth_server_id: 1, remote_id: id)
|
User.create(name: name, auth_server_id: 1, remote_id: id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sync_name_with_user
|
||||||
|
user.name = name
|
||||||
|
user.save!
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -3,6 +3,8 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
PreviewTopContributorsCount = 3
|
PreviewTopContributorsCount = 3
|
||||||
|
|
||||||
|
belongs_to :auth_user, foreign_key: :remote_id, inverse_of: :user
|
||||||
|
|
||||||
has_many :closet_hangers
|
has_many :closet_hangers
|
||||||
has_many :closet_lists
|
has_many :closet_lists
|
||||||
has_many :closeted_items, through: :closet_hangers, source: :item
|
has_many :closeted_items, through: :closet_hangers, source: :item
|
||||||
|
@ -22,6 +24,13 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
scope :top_contributors, -> { order('points DESC').where('points > 0') }
|
scope :top_contributors, -> { order('points DESC').where('points > 0') }
|
||||||
|
|
||||||
|
after_update :sync_name_with_auth_user, if: :saved_change_to_name?
|
||||||
|
|
||||||
|
def sync_name_with_auth_user
|
||||||
|
auth_user.name = name
|
||||||
|
auth_user.save!
|
||||||
|
end
|
||||||
|
|
||||||
def admin?
|
def admin?
|
||||||
name == 'matchu' # you know that's right.
|
name == 'matchu' # you know that's right.
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue