Erstellen Sie bei der Registrierung und beim Profilieren ein Formular im Assistentenformat. Ich wollte das Bild in meinem Profil speichern, aber es hat nicht funktioniert, deshalb habe ich es als Memorandum geschrieben.
Was ist das Assistentenformat? Diejenigen, die sagen siehe hier
MacOS Catalina 10.15.6 Rails 6.0.0 Ruby 2.6.5
Ich versuche, mich mit devise als Benutzer zu registrieren. Der Benutzertabelle wird nur der Spitzname hinzugefügt. Die Profiltabelle enthält einen Twitter-Link. Ich möchte ein Bild mit active_strage in der Profiltabelle speichern.
In Bezug auf die Implementierung dieser Funktionen Dieser Artikel ist ziemlich nah, also habe ich darauf verwiesen.
Im Assistentenformat konnte ich alles außer dem Bild speichern, aber das Bild wird nicht gespeichert.
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
Es scheint, dass die folgende Beschreibung darin schlecht war.
registrations_controller
@user.build_profile(@profile.attributes)
@user.save
Hier werden @user und @profile mit build verknüpft und zusammen mit @ user.save gespeichert, aber es scheint, dass es aufgrund des Speicherns hier nicht gut funktioniert. Finden Sie diesen Artikel
Ursache Der Zeitpunkt, zu dem die Datei tatsächlich in Active Storage gespeichert wird, ist der Zeitpunkt, zu dem das Modell gespeichert und der Prozess festgeschrieben wird. Selbst wenn Sie ein Bild aus dem Modell anhängen, bevor es gespeichert wird, scheint sich die Datei in einem unvollständigen Zustand zu befinden.
Es scheint, dass Active Strage nicht ohne das Speichern des Modells auskommen kann, also habe ich es gelöst, indem ich die Beschreibung wie folgt geändert habe.
registrations_controller
#In jedem Modell gespeichert
# @user.build_profile(@profile.attributes)
@user.save
@profile.user_id = @user.id
@profile.save
Ehrlich gesagt kann die Ursache des Fehlers sein, dass ich ihn verwendet habe, obwohl ich nicht verstanden habe, wie man mit Build speichert. Ich hoffe, Sie finden es hilfreich.
Recommended Posts