Wie man einen Fehler aus einem PostRevisor-Block auslöst und dem Benutzer präsentiert?

Hier ist ein Codeausschnitt, in dem ich eine zusätzliche Validierung hinzufügen möchte

(vereinfachter Code und Anwendungsfall)

# Verhindern, dass Nicht-Mitarbeiter die Kategorie eines Themas ändern
  PostRevisor.track_topic_field(:category_id) do |tc, category_id|
    if tc.guardian.is_staff?
      tc.record_change('category_id', tc.topic.category_id, category_id)
      tc.topic.category_id = category_id
    else
       tc.topic.errors[:base] << "Sie können die Kategorie dieses Themas nicht ändern"
    end
  end

Dies verhindert, dass die Kategorie von Nicht-Mitarbeitern geändert wird, gibt aber keinen Fehler aus.

Dies funktionierte früher:

Dieses Plugin wurde inzwischen archiviert.

Diese Anforderung sollte doch von der API unterstützt werden?

Du bist besser in diesen Dingen als ich, aber ich würde denken, dass Rails dies nicht nach oben weiterleiten muss, weil erwartet wird, dass Ember dem Benutzer keine Kategorie auswählen lässt, die nicht eine ist, die der Benutzer auswählen können sollte. Stelle also vielleicht sicher, dass das Frontend sie daran hindert, die Kategorie zu ändern, wenn sie dazu nicht in der Lage sind, damit PostRevisor nie mit dieser unangenehmen Situation konfrontiert wird?

1 „Gefällt mir“

Ja, sicher, das ist eine Überlegung.

Es ist eine gute Praxis, zuerst am API-Ende zu limitieren und dann, wenn möglich, am Frontend – d.h. Sie sollten sich niemals nur auf das Frontend verlassen, um eine illegale Aktion zu verhindern.

Darüber hinaus sollte das Frontend Active Record-Fehler weiterleiten.

Daher ist die Durchführung hier in der API wichtig.

Einverstanden. Sie möchten, dass Rails es erzwingt.

Ich dachte, ich hätte verstanden, dass es die Anforderung erzwingt und die Änderung ablehnt, aber dem Frontend keine ausreichend gute Fehlermeldung liefert.

1 „Gefällt mir“

Ja, Sie haben Recht.

Ich versuche nur, eine Kategorieänderung zu verhindern, daher ist die Benutzeroberfläche eher unpraktisch, da sie so konzipiert ist, dass Sie alle Metadaten ändern oder gar keine.

Daher wäre eine nach oben weitergeleitete Fehlermeldung sehr hilfreich.

Die Starrheit von .gjs-Vorlagen macht diese Art von Änderungen jetzt sehr schwierig.

Diese Vorlage ist immer noch hbs, aber ich möchte sie aus offensichtlichen Gründen nicht überschreiben.

Ich werde einen CSS-Hack versuchen.

Wieder einmal bist du darin besser als ich, aber ich dachte, es wäre möglich, den Kategorie-Selektor zu verstecken das scheint nicht zu funktionieren.

Vielleicht ist es also am besten, den Kategorie-Serializer zu hacken, damit er keine Kategorien sendet. Das scheint jedoch knifflig zu sein, da man herausfinden müsste, wie man ihn nur beim Bearbeiten eines Themas und nicht beim Erstellen eines neuen hackt.

1 „Gefällt mir“

„Hack“ hat funktioniert :tada: :

Ich hätte trotzdem gerne eine ausführliche und sinnvolle Antwort vom Server, insbesondere eine, die Active Record nutzt.

Ich bin auch auf dieses Verhalten gestoßen und war ratlos. Meine gesamte Entwicklung und Tests erfolgen über API-Anfragen, da ich noch nichts auf der Benutzeroberfläche habe. Daher war ich verwirrt, als die Antworten, die ich erhielt, wie Erfolge aussahen. Ich dachte, meine Guards wären völlig funktionslos, bis ich das Minimum eines Debuggers zusammengestellt und mich durch den Stepper gekämpft hatte.

Bearbeiten:
Huh… Ich habe beschlossen, meine Umgebung vollständig neu zu starten, und sie begann, Fehlermeldungen in der API-Antwort zurückzugeben.