In Ruby versuche ich zu verhindern, dass Benutzer jemanden als Freund hinzufügen, wenn einer von ihnen den anderen auf seiner Ignorierliste hat. In der Freundschaften Controller, versuche ichRuby, before_action confusion
class FriendshipsController < ApplicationController
before_action :ignored_user, only: :create
Und
def ignored_user
if current_user.foes.include?(@user)
flash[:notice] = "Unable to send friend request."
redirect_to :back
end
end
In diesem Zusammenhang zu definieren, current_user der Benutzer, der angemeldet ist, ist @user der Benutzer, dessen Profil sie sehen , und Feinde bedeutet "entweder jemanden, den sie ignorieren wollen oder jemand, der sie ignoriert." All das scheint zu funktionieren, außer der Zeile "if current_user blah blah". Wenn ich es durch "If current_user.admin" ersetzen? dann funktioniert es genau so, wie Sie es erwarten würden. Wenn dieser Benutzer ein Administrator ist, kann er keine Freundschaftsanfragen senden. Wenn ich es durch "if current_user.id == 2" ersetze, funktioniert es auch wie erwartet. Ich habe versucht, die defekte Leitung mit vielen, vielen Variationen des obigen Codes zu ersetzen, einschließlich solcher Dinge wie:
if Disagreement.where(foe_id: [@user, params[:id]], user_id: [current_user, params[:id]]).first
des an anderer Stelle arbeitet, nur nicht in der Freundschaften Controller.
Wie für Fehlermeldungen: Es gibt keine. Meine Versuche enden entweder mit dem Hinzufügen des Freundes, wenn er nicht erwünscht ist, oder dem Blockieren aller Freundesanfragen, einschließlich Freundschaftsanfragen an Benutzer, die nicht ignoriert werden. Jede Hilfe mit diesem würde sehr geschätzt werden.
Wo haben Sie @ @ user einen Wert zugewiesen? Ich nehme an, dass '@ user'' nil' ist und 'current_user.foes.include? (Nil)' immer 'false' ist. Um solche Probleme zu beheben, können Sie 'puts '@user is: # {@ user}" 'hinzufügen und die Serverausgabe in der Konsole überprüfen, um zu sehen, was vor sich geht. –
Besser noch, sagen Sie uns den Wert von 'current_user',' current_user.foes' und '@ user'. TIPP: Anstelle von "if foo.bar.first" tue 'if foo.bar.exists?' Anstatt "Disagreement" in diesem Fall zu instanziieren, gibt es "true" oder "false" zurück. – Leito
Whoops, atuser (stackoverflow lässt mich diese Antwort nicht posten, wenn ich nicht "atuser" schreibe) wird im users_controller unter der Aktion Show (und einigen anderen) definiert. Du hattest Recht! Nach dem Hinzufügen der Konsolenausgabe "atuser is:". Ich habe versucht, atuser durch "User.find (params [: id])" zu ersetzen, aber dieser Fehler wird zurückgegeben: ActiveRecord :: RecordNotFound in FriendshipsController # create Konnte Benutzer mit 'ID' nicht finden = raise RecordNotFound, " # {Name} konnte nicht mit '# {primary_key}' = # {id} " gefunden werden. In Zeile 37 ist dies der" if current_user usw. " Linie. – Display