Schnelle Antwort: Suche nach der Wohltätigkeitsorganisation, deren end_date
ist gleich Null.
Längere Antwort: Ihr Datenmodell entspricht möglicherweise nicht der von Ihnen gewünschten Semantik. Es scheint mir, dass start_date
ist hier irrelevant - ist nicht die aktuelle Wohltätigkeitsorganisation diejenige, deren Enddatum noch nicht erreicht wurde?
Im Allgemeinen besteht eine Möglichkeit, das aktuellste X zu erhalten, darin, alle X zu holen, sortiert nach absteigendem Datum, und das erste zu nehmen (oder in SQL-Begriffen, LIMIT 1 zu verwenden). In ActiveRecord sieht das in etwa so aus:
Charity.order("end_date DESC").first
obwohl ich ein bisschen rostig auf meine Rails 3 AR-Syntax bin, und ich glaube nicht, dass die Abfrage Ihr eigentliches Problem lösen wird (obwohl es irgendwie cool aussieht, amirite?).
Eine andere Lösung ist die Denormalisierung - das Hinzufügen eines current
boolesches Feld, und ein before_save
Filter, der die self[:current]
auf der Grundlage der von Ihnen beschriebenen Logik. EDIT: Eigentlich wird das hier nicht funktionieren, da die Zeit voranschreitet und sich das, was aktuell ist, außerhalb des Rahmens der Daten eines einzelnen Modells ändert.
Mein bester Rat ist, eine Menge Unit-Tests zu schreiben! Zeitbasierte Logik ist sehr kompliziert und es ist leicht, einen Grenzfall zu übersehen.