Il compare le mot de passe réel stocké dans la base de données (@ submission.password) avec le mot de passe entré par l'utilisateur à partir de la vue (params [: mot de passe]). S'ils sont égaux, la soumission est supprimée.Rails: Pouvez-vous vérifier la syntaxe pour une méthode de comparaison de chaîne simple?
Ceci est la méthode de comparaison de chaînes.
def compare_password
if @submission.password == params[:password] # This line is wrong.
@submission = Submission.find(params[:id])
@submission.destroy
redirect_to(@submission, :notice => 'Listing deleted successfully')
else
redirect_to(@submission, :alert => 'Password is incorrect.')
end
end
Ceci est la vue.
<%form_tag "/submissions/compare_password" do%>
<%=text_field_tag :password, params[:password]%>
<%=submit_tag "Delete"%>
<%end%>
L'erreur d'exécution que j'obtiens est la suivante.
undefined method `password' for nil:NilClass
modifier
Initialement mon routes.rb ressemblait à ceci
resources :submissions do
collection do
post :compare_password
end
end
Maintenant j'ai changé pour
resources :submissions do
member do
post :compare_password
end
end
Conservez-vous des mots de passe dans votre base de données? – Gareth
Oui. Les soumissions ne sont pas stockées dans la base de données de façon permanente et je vais les supprimer chaque semaine. Donc, la perte d'eux n'est pas vraiment un problème. –