Créez un formulaire au format assistant lors de l'inscription et du profil. Je voulais enregistrer l'image dans mon profil, mais cela n'a pas fonctionné, alors je l'ai écrite sous forme de mémorandum.
Quel est le format de l'assistant? Ceux qui disent Veuillez consulter ici
MacOS Catalina 10.15.6 Rails 6.0.0 Ruby 2.6.5
J'essaie de m'inscrire en tant qu'utilisateur en utilisant un appareil. Seul le surnom est ajouté à la table des utilisateurs. La table de profil comprend un lien Twitter. Je souhaite enregistrer une image avec active_strage dans la table de profil.
Concernant la mise en œuvre de ces fonctions Cet article est assez proche, alors j'y ai fait référence.
Dans le format de l'assistant, j'ai pu tout enregistrer sauf l'image, mais l'image n'est pas enregistrée.
registrations_controller
class Users::RegistrationsController < Devise::RegistrationsController
def create
@user = User.new(sign_up_params)
unless @user.valid?
render :new and return
end
session["devise.regist_data"] = {user: @user.attributes}
session["devise.regist_data"][:user]["password"] = params[:user][:password]
@profile = @user.build_profile
render :new_profile
end
def create_profile
@user = User.new(session["devise.regist_data"]["user"])
@profile = Profile.new(profile_params)
unless @profile.valid?
render :new_profile
end
@user.build_profile(@profile.attributes)
@user.save
session["devise.regist_data"]["user"].clear
sign_in(:user, @user)
redirect_to root_path
end
private
def profile_params
params.require(:profile).permit(:avatar, :favorite_beer, :twitter_link, :info)
end
Il semble que la description suivante était mauvaise.
registrations_controller
@user.build_profile(@profile.attributes)
@user.save
Ici, @user et @profile sont associés à build et enregistrés avec @ user.save, mais il semble que cela ne fonctionne pas bien en raison de l'enregistrement ici. Trouvez cet article
Cause Le moment auquel le fichier est réellement enregistré dans Active Storage est celui où le modèle est enregistré et le processus est validé, donc même si vous attachez une image du modèle avant son enregistrement, le fichier semble être dans un état incomplet.
Il semble qu'Active Strage ne puisse pas fonctionner tant que vous n'avez pas enregistré correctement le modèle, je l'ai donc résolu en modifiant la description comme suit.
registrations_controller
#Enregistré dans chaque modèle
# @user.build_profile(@profile.attributes)
@user.save
@profile.user_id = @user.id
@profile.save
Honnêtement, la cause de l'erreur peut être que je l'ai utilisé même si je ne comprenais pas comment enregistrer en utilisant build. J'espère que cela vous aidera.
Recommended Posts