#開発環境
ruby 2.6.5
Rails 6.0.3.4
devise
ActiveStorage
##困っている事
ユーザー周りをdeviseを使用して実装中
新規登録では、パスワードとEmailとnicknameで登録が完了するようにし
プロフィール編集でアバターと自己紹介文を登録できるようにしたいのですが
両方とも保存がうまくできず困っています…
##記述内容
アプリケーションコントローラーからみていきます
**app>controllers>application_controller.rb** def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname]) devise_parameter_sanitizer.permit(:account_update, keys:[:profile, :avatar]) end
deviseのregistrationsのedit.html.erbにuserモデルに自己紹介文とアバターを保存するように記述してます
**app>views>devise>registrations>edit.html.erb** <%= form_with model: @user, url: user_registration_path, local: true do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <div class="edit-wrapper"> <div id="avatar-list"> </div> <p class="edit-avatar-text"> クリックして写真をアップロード </p> <div class="edit-avatar-upload"> <%= f.file_field :avatar, class: 'edit-avatar'%> </div> <div class="edit-profile-container"> <%= f.text_area :profile, class: 'edit-profile'%> </div> <div class='post-new-btn'> <%= f.submit "変更する" ,class: 'post-new'%> </div> </div> <% end %>
deviseのコントローラーが使用できるよようルーティングも記述しております
**routes.rb** devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions' }
deviseのmigrateファイルにprofileが保存されるようにカラムを追加
**devise_create_user.rb** create_table :users do |t| ## Database authenticatable t.string :nickname, null: false t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.text :profile
avatarがActiveStorageに保存されるようにuserモデルにアソシエーションを記述
**models>user.rb** class User < ApplicationRecord has_one_attached :avatar
refistations_controllerにアクションを追加
# GET /resource/edit def edit @page_name = "プロフィール編集画面" super end # PUT /resource def update if account_update_params[:avatar].present? @user.avatar.attach(account_update_params[:avatar]) end super end
binding.pryでどこで不具合が出ているか確認
24: def update 25: if account_update_params[:avatar].present? 26: @user.avatar.attach(account_update_params[:avatar]) 27: end => 28: binding.pry 29: super 30: end [1] pry(#<Users::RegistrationsController>)> account_update_params[:avatar].present? => true [2] pry(#<Users::RegistrationsController>)> @user.avatar.attach(account_update_params[:avatar]) => false
このような流れです
#####自己紹介文(profile)、アバター(avatar)両方保存できていない状況です…
##自分の仮説としては
ActiveStorageにすでに写真を保存するためのimageカラムがあるためアバターを保存することができないのかな?とか考えています!でもprofileも保存できていないし…謎だらけです
#####皆様のお力をお貸しください!よろしくお願いいたします
あなたの回答
tips
プレビュー