2009-06-27 4 views
2

Wow, verrückter Titel! Aber hier ist das Problem. In Bemühungen, meine Schulwebsite-Management-System-Anwendung zu trocknen, habe ich ein Modul meiner Anwendung (FileSet) erholsam gemacht und es an einem Ort platziert. Zuvor wurde FileSet im allgemeinen Website-System und auch in einem Kinder Lernbereich System verwendet. Sie verhielten sich beide genau gleich, bis auf eine Nuance. Im Bereich Kinder wurden FileSet-Dateien in zwei Kategorien unterteilt: Start und Normal. Startup-Dateien sind diejenigen, die Lehrer gemacht haben, normale sind diejenigen, die Kinder gemacht haben. Jetzt in der allgemeinen Website-App ist diese Unterscheidung nicht relevant und wird daher ignoriert. Hier ist der schwierige Teil. Ich möchte die gleichen Controller und Ansichten in beiden Kontexten verwenden. Zur Laufzeit weiß ich, dass eine Dateigruppe entweder zur allgemeinen Website oder zu diesem Lernbereich gehört. Daher kann ich sagen, dass ich, wenn es sich um den Lernbereichskontext handelt, FileSet.find (x) .files darauf beschränken soll, normaler 'benannter Umfang. Wenn der Kontext die normale Website ist, verwenden wir keinen benannten Bereich.Einschnürende Suchbedingungen basierend auf Laufzeitkontexten

Ich habe die oben genannten Informationen vereinfacht, aber im Grunde ist die Frage, wie kann ich FileSet.find (x) .files aufrufen und haben die Dateien Methode klug genug, um die zurückgegebenen Ergebnisse basierend auf dem Laufzeitkontext einzuschränken?

Ich habe Assoziation Erweiterung ein wenig untersucht, aber das scheint nicht die Arbeit zu tun. Ich hoffe, dass hier etwas existiert. Ich versuche verzweifelt, diese Logik im Modell zu behalten und nicht die Ansichten oder die Kontrolleure damit beschäftigt zu haben. Standardbereiche würde eine Behandlung arbeiten, wenn sie zur Laufzeit ausgewertet wurden :)

Wir freuen uns auf einige Vorschläge :)

Cheers,

Brendon

Antwort

2

Können Sie einen benannten Umfang mit einem proc verwenden, die bestimmt den aktuellen Kontext und gibt die entsprechenden Bedingungen zurück? So etwas wie dies in Datei:

named_scope :for_context, :conditions => lambda { 
    if only_normal? 
    { :type => 'normal' } 
    elsif only_startup? 
    { :type => 'normal' } 
    else 
    {} 
    end 
} 

dann könnte man nennen:

FileSet.find(x).files.for_context 
+0

Dank Arthur, das wird wohl der Weg sein. Ich habe gerade gemerkt, dass ich auch basierend auf einer Controller-Bedingung filtern muss (ob der Benutzer im Admin-Bereich ist oder nicht), also muss ich einen Bereich aufrufen und den aktuellen Kontext durchgehen :) Danke für deinen Vorschlag:) –