Beim Kombinieren der if-Anweisung und des logischen Operators waren einige Punkte zu beachten, daher werde ich sie zusammenfassen.
wenn bedingter Ausdruck
#Verarbeitung, wenn der bedingte Ausdruck wahr ist
else
#Verarbeitung, wenn der bedingte Ausdruck falsch ist
end
&& → und ||→ oder
wenn bedingter Ausdruck 1&&Bedingter Ausdruck 2
#Verarbeitung, wenn der bedingte Ausdruck 1 und der bedingte Ausdruck 2 wahr sind
else
#Verarbeitung, wenn auch nur einer der bedingten Ausdrücke falsch ist
end
Wenn der bedingte Ausdruck 1 im Detail betrachtet wird, wird der Code des bedingten Ausdrucks 2 überhaupt nicht gelesen. Speziell,
<% if user_signed_in? && @message.user.id == current_user.id %>
<% if @message.user.id == current_user.id && user_signed_in? %>
Wenn Sie mit devise die Anzeige zwischen dem angemeldeten und dem nicht angemeldeten Status trennen Wenn Sie angemeldet sind, verursacht keiner der Codes einen Fehler. Wenn Sie jedoch nicht angemeldet sind Der obige Code verursacht keinen Fehler, der folgende Code jedoch.
Der Grund dafür ist, dass "@ message.user.id" und "current_user.id" nur eingegeben werden, wenn sie angemeldet sind, und es überhaupt nicht möglich ist, festzustellen, ob sie mit "==" gleich sind. Wenn Sie in der obigen Formel zum Zeitpunkt von "user_signed_in?" Nicht angemeldet sind, wird "false" zurückgegeben, sodass Sie den Code nach "&&" nicht zur Unterscheidung verwenden müssen.