Bereich für mehrere Modelle

8

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?

    
kidbrax 23.01.2013, 15:08
quelle

2 Antworten

10

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:

%Vor%

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.

    
Marc Baumbach 23.01.2013, 15:57
quelle
0

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%     
Walksalong 28.02.2014 20:54
quelle

Tags und Links