Überprüfen Sie, ob die Modellinstanz innerhalb von named_scope in Schienen liegt

7

Angenommen, ich besitze einen benannten Bereich:

%Vor%

Dies funktioniert gut für Abfragen und ich habe eine Reihe von nützlichen named_scopes definiert. Was ich gerne hätte, wäre Folgendes:

%Vor%

Die '.bar?' Die Methode gibt einfach wahr oder falsch zurück, wenn die Modellinstanz in den genannten Bereich fällt. Gibt es das überhaupt, ohne eine 'is_bar' zu schreiben? Methode, obwohl ich bereits einen guten Weg geschrieben habe, um zu überprüfen, ob etwas 'is_bar?' Wenn ich mich richtig erinnere, ist DRY gut, also würde jede Hilfe sehr geschätzt /

    
user94154 10.08.2009, 16:17
quelle

2 Antworten

20

Sie können die Methode exists? für einen benannten Bereich aufrufen, der die Datenbank abfragt, um festzustellen, ob der angegebene Datensatz mit diesen Bedingungen existiert.

%Vor%

Dies funktioniert jedoch nicht, wenn Sie die Attribute in f geändert und nicht in der Datenbank gespeichert haben. Dies liegt daran, dass die angegebenen Scope-Bedingungen SQL sind, sodass die Überprüfung dort stattfinden muss. Der Versuch, zu Ruby if conditions zu konvertieren, ist unordentlich, besonders in komplexeren Szenarien.

    
ryanb 10.08.2009, 16:41
quelle
1

Wenn Ihre Bereiche einfach sind, möchten Sie wahrscheinlich Code-Duplizierung vermeiden. Mit meiner Lösung können Sie model.active? aufrufen, um zu wissen, ob eine Instanz zum Bereich gehört, und Model.active , um alle Datensätze zu finden, die dem Bereich entsprechen. model.active? beinhaltet keine Datenbankabfragen.

Überlegen Sie, ob Sie dies zu config/initializers/scope_and_method.rb hinzufügen:

%Vor%

Verwendung:

%Vor%

Funktioniert so, als wäre es:

%Vor%

Dies ist eine Lösung für Rails 2.3. Dies erfordert eine sehr kleine Optimierung für die Rails 3 und 4. ( named_scope - & gt; scope ) Ich werde es bald überprüfen.

    
Nowaker 18.12.2013 14:12
quelle