2016-09-04 2 views
1

Ich habe eine Rails-Anwendung, die Informationen über Kinder speichert, bestimmte Felder würden eine child anaphylaktische machen und ich möchte in der Lage sein, eine Methode in meinem Child Modell zu definieren, so dass ich eine Überprüfung durchführen kann auf einem Rekord für Anaphylaxie. Zum Beispiel ist ein child anaphylaktisch, wenn 10 bestimmte Felder nil sind. Ich möchte nicht @anaphylactic_kids = Kid.where(. . . and . . . and . . .) schreiben, da es wirklich lang wäre. Gibt es einen einfacheren Weg, dies zu tun? Danke für die Hilfe!Schienen definieren keine Überprüfung auf Datensatz in Modell

Antwort

4

Es gibt keine einfache Möglichkeit, die volle where Klausel zu vermeiden, schreiben mindestens einmal, aber Sie können es vermeiden, in jeden Controller-Aktion Sie es verwenden wollen in schreiben, indem ein Rahmen für sie zu schaffen.

In Ihrem Modell, fügen Sie diese Methode:

def self.anaphylactic 
    Kid.where(:field1 => nil, :field2 => nil, :field3 => nil) 
    # complete the where clause for every field you need to check 
end 

Anstatt nun die volle Kid.where Anweisung in Ihrem Controller zu verwenden, können Sie einfach Kid.anaphylactic rufen die gleichen Ergebnisse zu erhalten.

+0

Sie können auch einen benannten Bereich definieren, aber die von ArtOfCode vorgeschlagene Lösung ist IMO besser. Auch im Hinterkopf behalten diese SQL erklären für eine solche Abfrage möglicherweise große und in Zukunft würde richtige Indizes ausreichen – Sebastian

+0

@ Sebastian genannten Bereiche und Modell Klassenmethoden sind fast das Gleiche - es gibt ein paar Unterschiede, aber sie führen die gleiche Funktion am Ende – ArtOfCode

+0

das scheint die genaue Idee zu sein, nach der ich gesucht habe, danke! –

Verwandte Themen