diff --git a/app/assets/stylesheets/inputs.css b/app/assets/stylesheets/inputs.css index 602ff7976..eb4fbc821 100644 --- a/app/assets/stylesheets/inputs.css +++ b/app/assets/stylesheets/inputs.css @@ -69,6 +69,13 @@ --input-border-size: 0.15rem; } } + + &:is(.avatar) { + img, + input[type="file"] { + border-radius: 50%; + } + } } .input--select { diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index a70195c9e..32e5c340c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -35,6 +35,6 @@ class UsersController < ApplicationController end def user_params - params.expect(user: [ :name, :email_address, :password ]) + params.expect(user: [ :name, :email_address, :password, :avatar ]) end end diff --git a/app/models/user.rb b/app/models/user.rb index 02c20ef98..907881cc5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,5 @@ class User < ApplicationRecord - include Transferable + include Avatar, Transferable belongs_to :account diff --git a/app/models/user/avatar.rb b/app/models/user/avatar.rb new file mode 100644 index 000000000..a9d2ad12e --- /dev/null +++ b/app/models/user/avatar.rb @@ -0,0 +1,17 @@ +module User::Avatar + extend ActiveSupport::Concern + + included do + has_one_attached :avatar + end + + class_methods do + def from_avatar_token(sid) + find_signed!(sid, purpose: :avatar) + end + end + + def avatar_token + signed_id(purpose: :avatar) + end +end diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb index bffe4052e..5ef66db39 100644 --- a/app/views/users/edit.html.erb +++ b/app/views/users/edit.html.erb @@ -11,11 +11,14 @@