J'écrirai sur ce qu'il faut faire si vous souhaitez qu'une validation particulière ne fonctionne que sur un contrôleur particulier.
Par exemple, lorsque vous enregistrez des informations utilisateur, pensez au moment où vous souhaitez enregistrer les informations étape par étape.
Table des utilisateurs
column | type |
---|---|
name | string |
string | |
password | string |
address | string |
image | string |
Page 1: nom, email, mot de passe 2ème page: adresse, image
Considérez le processus d'enregistrement du nom, de l'e-mail et du mot de passe, puis de l'enregistrement de l'adresse et de l'image.
Si vous voulez rendre toutes les colonnes obligatoires, écrivez simplement presence: true
dans le modèle et vous obtiendrez une erreur lors de l'enregistrement de la première page. (Parce que l'adresse et l'image sont vides)
Que dois-je faire si je souhaite utiliser des validations différentes sur les première et deuxième pages?
Vous pouvez utiliser with_options
pour chaque action.
L'image est que vous nommez le groupe de validation comme with_options on: ~ do
dans le modèle et utilisez la méthode valid? (Name)
sur le contrôleur pour vérifier la validation.
La méthode d'écriture spécifique est la suivante. (Veuillez noter que certaines parties sont écrites avec une légère pause.)
modèle
with_options on: :step1 do
validates :name, presence: true
validates :email, uniqueness: true
validates :password, presence: true, length: { minimum: 8 }
validates :password, confirmation: true
end
with_options on: :step2 do
validates :address, presence: true
validates :image, uniqueness: true
end
contrôleur step1
def create
@user = User.new(user_params)
if @user.valid?(:step1) && @user.save
return redirect_to step2_path
end
render :new
end
contrôleur step2
def update
@user = User.find(params[:id])
if @user.valid?(:step2) && @user.update(user_params)
return redirect_to user_path
end
render :edit
end
Si vous souhaitez appliquer toutes les validations en même temps, vous devez écrire comme valide? (: Step1) && valid? (: Step2)
, ce qui est un peu gênant ...
(Je pensais que toutes les options with_options seraient utilisées uniquement par valid?, Mais cela n'a pas fonctionné)
Au fait, si vous souhaitez utiliser correctement create et update, veuillez vous reporter à l'article ici. (Bien qu'il y ait une partie qui chevauche ce post ...)
Recommended Posts