Ich hatte noch nie einen Programmierfehler, aber da der Entwickler auch ein Mensch ist, kann ich Fehler machen, und ein Netzwerkfehler kann dazu führen, dass der Entwickler einen Fehler macht. Es gibt verschiedene Arten von Fehlern, aber es gibt viele Situationen, in denen Sie einen Prozess schreiben sollten, z. B. "Wenn ein solcher Fehler auftritt, tun Sie dies". In solchen Fällen kann jedoch eine grundlegende Verwendung vonett und Rettungs_von verwendet werden.
rescue Sie können Rettung verwenden, um einen Fehler zu erkennen und zu schreiben, was als Nächstes zu tun ist. Das Folgende ist der Unterschied zwischen dem Fall ohne Rettung und dem Fall mit Rettung.
Die Benutzerklasse erstellt einen Benutzer so, dass er nur eine Namensspalte enthält.
> user = User.new('Yamada')
=> #<User:0x00007ff0fa896758 @name="Yamada">
> user.name
=> "Yamada"
Erstellen Sie eine put_info-Methode in der User-Klasse und führen Sie sie aus.
class UsersController < ActionController::Base
def puts_info
"Name ist" + name
end
end
> user.puts_info
=>Der Name ist Yamada
Fügen Sie der put_info-Methode die nicht vorhandene age-Methode hinzu und führen Sie sie aus.
class UsersController < ActionController::Base
def puts_info
"Name ist" + name
"Alter ist" + age
end
end
> user.name
=> "Yamada"
> user.puts_info
=> NameError (undefined local variable or method `age' for #<User:0x00007fdeb98f3ed8 @name="Yamada">)
Ich habe einen NameError. Ich werde die Verarbeitung im Falle eines Fehlers mit Rettung schreiben.
class UsersController < ActionController::Base
def puts_info
"Name ist" + name
"Alter ist" + age
rescue => e
"Es ist ein Fehler"
end
end
> user.puts_info
=> "Es ist ein Fehler"
rescue_from
Mit recovery_from
können bestimmte Arten oder mehrere Arten von Ausnahmen von einem gesamten Controller und seinen Unterklassen behandelt werden.
record_not_found
aus.class UsersController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
private
def record_not_found
render plain: "404 Not Found", status: 404
end
end
1, Führen Sie auf dem Client-Controller den Berechtigungsprüfungsprozess mit "before_action" aus, bevor Sie die Bearbeitungsaktion ausführen.
Führen Sie current_user.admin?
In der check_authorization
-Methode aus. Wenn Sie kein Administrator sind, verwenden Sie raise
, um die Ausnahme User :: NotAuthorized
auszulösen.
class ClientsController < ApplicationController
before_action :check_authorization
def edit
@client = Client.find(params[:id])
end
private
def check_authorization
raise User::NotAuthorized unless current_user.admin?
end
end
2, Schreiben Sie einen Prozess, damit ApplicationController im Fall des Fehlers "User :: NotAuthorized" die Methode "user_not_authorized" ausführt.
class ApplicationController < ActionController::Base
rescue_from User::NotAuthorized, with: :user_not_authorized
private
def user_not_authorized
flash[:error] = "Sie haben keine Berechtigung, auf diese Seite zuzugreifen."
redirect_back(fallback_location: root_path)
end
end
Auf diese Weise können Sie im Falle eines Berechtigungsfehlers "Sie haben keine Berechtigung" anzeigen. Sie müssen sich keine Gedanken über Berechtigungen innerhalb der Bearbeitungsaktion machen. Wenn es eine andere Methode als die Bearbeitung gibt, für die Administratorrechte erforderlich sind, können Sie before_action verwenden, um "check_authorization" auszuführen.
https://railsguides.jp/action_controller_overview.html#rescue