Il y avait certains points à prendre en compte lors de la combinaison de l'instruction if et de l'opérateur logique, je vais donc les résumer.
si expression conditionnelle
#Traitement lorsque l'expression conditionnelle est vraie
else
#Traitement lorsque l'expression conditionnelle est fausse
end
&& → et ||→ ou
si expression conditionnelle 1&&Expression conditionnelle 2
#Traitement lorsque l'expression conditionnelle 1 et l'expression conditionnelle 2 sont vraies
else
#Traitement lorsque même l'une des expressions conditionnelles a la valeur false
end
En regardant cela en détail, lorsque l'expression conditionnelle 1 est fausse, le code de l'expression conditionnelle 2 n'est pas lu en premier lieu. En particulier,
<% if user_signed_in? && @message.user.id == current_user.id %>
<% if @message.user.id == current_user.id && user_signed_in? %>
Lors de l'utilisation de l'appareil pour séparer l'affichage entre l'état connecté et l'état non connecté Si vous êtes connecté, aucun des codes ne provoquera d'erreur. Cependant, si vous n'êtes pas connecté Le code ci-dessus ne provoque pas d'erreur, mais le code ci-dessous le fait.
La raison en est que «@ message.user.id» et «current_user.id» ne sont pas saisis sauf s'ils sont connectés, et il n'est pas possible de déterminer s'ils sont égaux à «==» en premier lieu.
D'un autre côté, dans la formule ci-dessus, si vous n'êtes pas connecté au moment de ʻuser_signed_in? ,
False est retourné, vous n'avez donc pas à utiliser le code après
&& `pour la discrimination.
Recommended Posts