Ich habe mehrere Objekte, die alle ein approved
-Feld haben.
Was wäre der beste Weg, um einen Bereich für alle Modelle zu implementieren?
Ich habe zum Beispiel ein Objekt sighting
und ein Objekt comment
. Beide müssen von einem Administrator genehmigt werden, bevor sie öffentlich zugänglich sind.
Wie kann ich also einen Bereich erstellen, der sowohl comment.approved
als auch sighting.approved
zurückgibt, ohne ihn für jedes Modell zu wiederholen? Werden hier Bedenken angesprochen?
Sie können in jedem Modell nur einen Bereich angeben, wenn Sie nur die Scoping-Funktion verwenden möchten. Wenn Sie ActiveSupport::Concern
verwenden, können Sie auch zusätzliche Methoden hinzufügen, wenn Sie davon ausgehen, dass dies passieren wird. Hier ist ein Beispiel:
Dann können Sie Aufrufe wie Sighting.approved
und Comment.approved
vornehmen, um die entsprechende Liste genehmigter Datensätze zu erhalten. Sie erhalten auch die unapprove
-Methode und können etwas wie Comment.approved.first.unapprove
machen.
In diesem Beispiel habe ich auch default_scope
eingefügt, was bedeutet, dass Aufrufe wie Sighting.all
oder Comment.all
nur nicht genehmigte Elemente zurückgeben. Ich habe dies nur als Beispiel hinzugefügt, es ist möglicherweise nicht auf Ihre Implementierung anwendbar.
Obwohl ich bemerkt habe, dass der Bereich, der aus den Bedenken gezogen wird, der letzte Bereich beim Verketten von Bereichen sein muss. Ich bin mir nicht ganz sicher warum.
%Vor%Als ich es versuchte als:
%Vor%Es ist im Stillen gescheitert.
Und ich nehme das zurück. Ich habe älteren Code migriert und Bereiche mit Bedingungen anstelle von Lambda verwendet. Beim Ersetzen von: Bedingungen spielte die Reihenfolge des Umfangs keine Rolle mehr.
%Vor%ersetzt
%Vor%Tags und Links ruby-on-rails