閲覧していただきありがとうございます。
表題についてになります。
Deviseに既に独自カラムを一つ設けており(Rankカラム)、そちらは問題なく動作しています。
ところが今回、ActiveStroageを使用し、Avatarカラムを作成しようとしたところ表示されない次第です。
user.rb
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable include DeviseTokenAuth::Concerns::User has_one_attached :avatar //avatarカラムを追加 validates :name, presence: true def update_without_current_password(params, *options) params.delete(:current_password) if params[:password].blank? && params[:password_confirmation].black? params.delete(:password) params.delete(:password_confirmation) end result = update_attributes(params, *options) clean_up_passwords end
application_controller.rb
class ApplicationController < ActionController::Base include DeviseTokenAuth::Concerns::SetUserByToken protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? //カラムの追加を許可 skip_before_action :verify_authenticity_token helper_method :current_user, :user_signed_in? ... protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:account_update, keys: [:rank, :avatar]) end end
上記の設定でカラムの作成は行われるだろうと思っていたのですが、avatarカラムが出来上がることはなく、今に至ります。
schema.rbには、usersテーブルの他にactive_storage_attachmentsテーブル、active_storage_blobsテーブル、active_storage_variant_recordsテーブルが作成されているので、ActiveStorage自体をインストールし損ねていることはないと思います。
※こちらは関係ないと思いますが念のため、Deviseのregistrations_controller.rbになります。
class Api::V1::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController def update super if account_update_params[:avatar].present? resource.avatar.attach(account_update_params[:avatar]) end end private def sign_up_params params.permit(:email, :password, :password_confirmation, :name) end def account_update_params params.permit(:name, :email, :rank, :avatar) end end
Reactでフロントを作成し、updateした結果
Unpermitted parameters: :avatar, :registration Filter chain halted as :validate_account_update_params rendered or redirected Completed 422 Unprocessable Entity in 19ms (Views: 0.3ms | ActiveRecord: 0.5ms | Allocations: 1030)
stackoverflowで回答らしきものがあった(application_controller.rbにてconfigure_permitted_parametersのbefore_actionの開始順を早めるためにprepend_before_actionに変える。)のですが、そちらも上手くいきませんでした。
バージョン
Ruby. 2.7.4
Rails 6.1.4
Devise. 4.8.0
User.colunm_names結果
"id", "provider", "uid", "encrypted_password", "reset_password_token", "reset_password_sent_at", "allow_password_change", "remember_created_at", "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "name", "nickname", "image", "email", "tokens", "created_at", "updated_at", "rank"
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。