2 Stimmen

DRY-Lösung für die Wiederverwendung von Schienenumfangsbedingungen in anderen Methoden?

In Rails 3.1, angesichts dieses Modells:

class Subscripion < ActiveRecord::Base
    scope :active, lambda {
        where("start_date is not ? AND end_date >= ?", nil, Date.today)
    }

    def active?
      self.class.active.exists?(self)
    end
end

Bisher ist dies die trockenste Lösung, die mir eingefallen ist, weil sie die Bedingungen in der Datenbank nicht wiederholt. active? Methode.

Allerdings gibt es zwei Nachteile:

  • Bei einer Abonnementinstanz wäre keine Datenbankabfrage erforderlich, um festzustellen, ob sie aktiv ist. Wir können dies anhand ihrer Attribute überprüfen: !start_date.nil? && end_date >= Date.today . Die Aufforderung an exists? führt zu einer zusätzlichen Datenbankabfrage.
  • Wenn die ursprüngliche Abonnementinstanz vor dem Aufruf von exists? über die active Bereich ist das Ergebnis nicht das, was wir wollen, denn exists? ignoriert die Instanz und fragt direkt die Datenbank ab.

Gibt es bessere Lösungen, bei denen die Bedingungen an einer Stelle definiert sind?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X