1. Schlussfolgerung </ b>
2. Wann passiert es? </ b>
3. Verwendung von </ b>
4. Was ich hier gelernt habe </ b>
Verwenden Sie "redirect_to" und "es sei denn" </ b>!
buy_item_controller.rb
def edit
@buy_item = BuyItem.find(params[:id])
end
Zum Beispiel Ich glaube, ich programmiere die Aktion "Bearbeiten", wenn ich meine Seite, mein Konto oder die von mir gepostete Seite bearbeite.
Wenn Sie zu diesem Zeitpunkt allein mit dem oben genannten Programm ~ ~ / ~ ~ / edit in die URL eingeben, kann sogar der abgemeldete Benutzer oder der bei derselben Anwendung angemeldete Benutzer unterschiedliche Konten betreiben.
buy_item_controller.rb
def edit
@buy_item = BuyItem.find(params[:id])
redirect_to root_path unless current_user.id == @buy_item.user_id
end
Da wir gem "devise" verwenden, ist "current_user.id" enthalten.
"Redirect_to root_path" wird verwendet, um "zur obersten Seite zurückzukehren".
"Es sei denn, current_user.id == @ buy_item.user_id" ist programmiert als "wenn der aktuell angemeldete Benutzer nicht der Verkäufer des Artikels ist".
Wenn sich der Verkäufer und der angemeldete Benutzer unterscheiden, kann das Produkt daher nicht bearbeitet werden.
Ich dachte, ich würde es mit "Bearbeiten" einstellen, selbst wenn ich abgemeldet wäre. Wenn Sie jedoch abgemeldet sind, ist der Bereich zu weit und Sie müssen ihn für alle Aktionen festlegen. Zu dieser Zeit erinnerte ich mich an before_action. Aktionen, die mit before_action und Except keine Endlosschleifen verursachen Abgesehen von (ohne Index und Show) dachte ich, es wäre gut, mit zu programmieren, es sei denn.
buy_item_controller.rb
before_action :move_to_index, except: [:index, :show]
def move_to_index
redirect_to new_user_session_path unless user_signed_in?
end