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 /
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.
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.
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:
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.
Tags und Links ruby-on-rails named-scope boolean