Sie können mit den Kontrollfluss Operator and
über den logischen Operator &&
wie so:
if user = User.find_by(email: '[email protected]') and !user.activated?
# do something
end
Beispiel:
if a = 12 && a.even?
"Working"
end
#=> undefined method `even?' for nil:NilClass
if b = 12 and b.even?
"Working"
end
#=> "Working"
Diese sollten Sie die Ausnahmebehandlung in Bedingung hinzufügen funktioniert, weil and
eine niedrigere Präzedenz als die Zuweisung hat, also wird die Zuweisung o ccur vor der zweiten bedingten Prüfung.
Solange Sie die found = in conditional, should be ==
Warnungen nicht stört.
Zweite Option:
Die andere Option ist explizite Klammern dh.
if a = 12 && a.even?
"Working"
end
#=> undefined method `even?' for nil:NilClass
if (b = 12) && b.even?
"Working"
end
#=> "Working"
funktioniert dies, weil die Klammern werden ()
zuerst ausgewertet werden, bevor die Bedingung ausgewertet wird, so dass die Zuordnung innerhalb der Pars auftreten wird und dann als Teil der bedingten ausgewertet werden.
More on Ruby Operator Precedence
Sind Sie sicher, das ist genau das, was wie Ihr Code sieht? Ich glaube, das sollte funktionieren, denn wenn der Benutzer nicht gefunden wird, gibt es nil zurück, was zu false führt. – arjabbar