Die Idee beginnen zu verwenden, Rettung, sicherzustellen, dass die Methoden zu setzen, als ein Fehler in dem begin
Block erzeugen kann, dann können Sie die Fehler in einem o mehr rescue
Blöcke behandeln und schließlich können Sie ein optionale setzen ensure
Blockieren Sie Sätze, die Sie sowohl bei Erfolgs- als auch bei Fehlerszenarien ausführen möchten, z. B. bei Release-Ressourcen.
Wenn Sie möchten, dass die gesamte Methode behandelt werden von beginnen, retten, stellen Sie sicher Blöcke, dann begin
Schlüsselwort ist optional, können Sie verwenden oder nicht das Schlüsselwort, da Sie für die kürzeste Option fragen, müssen Sie einige kleinere tun Änderungen an Ihrem Code:
def rescue_definition
user.begin_rescue
# and any other stuff you want to execute
if user
flash['success'] = 'OK'
else
flash['error'] = 'NO'
end
redirect_to :back
rescue Example::ParameterValidationError => e
redirect_to :back, error: e.message_to_purchaser
rescue Example::ProcessingError => e
redirect_to :back, error: e.message_to_purchaser
rescue Example::Error
redirect_to :back, error: e.message_to_purchaser
end
Wenn Sie es noch kürzer Sie mehrere Ausnahmetypen in einem Rettungsblock retten kann:
def rescue_definition
user.begin_rescue
# and any other stuff you want to execute
if user
flash['success'] = 'OK'
else
flash['error'] = 'NO'
end
redirect_to :back
rescue Example::ParameterValidationError, Example::ProcessingError, Example::Error => e
redirect_to :back, error: e.message_to_purchaser
end
Danke für Ihre Antwort, ich werde Ihren Vorschlägen folgen. Außerdem wiederhole ich 'redirect_to: back, error: e.message_to_purchaser' in 3 Rettungen. Gibt es einen kürzesten Weg dazu? – Bengala
@Bengala Wenn dies die richtige Antwort ist, sollten Sie es akzeptieren. – mysmallidea
Ich mache keine richtige Antwort, da wir 3 mal "redirect_to: back, error: e.message_to_purchaser" wiederholen. Ich bin mir sicher, dass es kürzer sein könnte. – Bengala