session est utilisée lors du déplacement vers la destination de la transition tout en conservant les données au "format de l'assistant", etc.
Une session est un mécanisme de stockage temporaire d'informations. Dans Rails, une session stocke des données dans un objet appelé session sous la forme d'un hachage.
Par exemple, supposons un site où la page change lorsque vous vous inscrivez en tant que membre. Dans ce cas, il est nécessaire de stocker temporairement les informations saisies à l'aide de la session dans la session, de passer à la page suivante et de la développer.
En principe, il est supposé que les informations sur les membres sont enregistrées lors de la transition des pages à l'aide de devise.
ruby 2.6.5 rails 6.0.0 devise 4.7.3
Implémentons-le!
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
def new
@user = User.new
end
def create
@user = User.new(sign_up_params)
unless @user.valid?
render :new and return
end
session["devise.regist_data"] = {user: @user.attributes}
@address = @user.build_address
render "new_address"
end
J'ai écrit diverses autres choses, mais je ferai attention à la session.
session["devise.regist_data"] = {user: @user.attributes}
{user: @ user.attributes} utilise la méthode des attributs pour formater les données lorsque vous voulez que la session contienne des informations sous la forme d'un objet de hachage.
En d'autres termes, les données @user attribuées sont dans la session dans un état haché. Les informations d'entrée sont maintenant affectées à la session ["devise.regist_data"] et sont conservées.
Ensuite, la page est transférée et développée tout en conservant les données.
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
#réduction
def create_address
@user = User.new(session["devise.regist_data"]["user"])
@address = Address.new(useraddress_params)
if @address.valid?
@user.build_address(@address.attributes)
@user.save
session["devise.regist_data"]["user"].clear
sign_in(:user, @user)
else
render "new_address"
end
end
Ceci est également décrit de différentes manières, mais faites attention à @user en haut.
@user = User.new(session["devise.regist_data"]["user"])
Décrit la session ["devise.regist_data"] ["user"]. Si vous avez des données avec {user: 〇〇}, vous devez utiliser ["user"]. De plus, étant donné que la session contient des informations dans un tableau, vous pouvez également avoir des informations comme suit. session["devise.regist_data"] = {user: @user.attributes, address: @user.address}
Avec cela, la session peut être étendue sur la page de destination de la transition et attribuée à @user.
Après cela, vous pouvez enregistrer en utilisant les données attribuées à @user.
Cette fois, j'ai présenté comment utiliser la session lors de l'utilisation de devise au "format assistant".
Je suis un débutant en programmation, mais je publie un article dans l'espoir qu'il aidera les gens qui sont également en difficulté. A la prochaine fois ~
Recommended Posts