2016-06-19 9 views
0

(Dies ist wahrscheinlich eine einfache Frage, aber ich habe nicht die richtigen Worte finden, um mein Problem zu google)Datenbankabfrage in Schienen, speichert Modell als Variable in der Steuerung

In meinem Controller habe ich eine Abfrage wie folgt:

Das funktioniert gut. In diesem Fall wird nur das Modell "event" abgefragt und nicht andere Modelle wie "Blog" oder "Post". Anstatt jede Abfrage zu schreiben, ich will nur eine Methode aufrufen, die wie folgt aussehen könnte:

def find_information (model, word) 
    information = model.where(name: 'word') 
end 

Also, wenn ich find_information (Event, xyz) schreiben, sollte es tun:

information = Event.where(name: 'xyz') 

oder wenn ich schreibe find_information (Blog, xyz), sollte es tun:

information = Blog.where(name: 'xyz') 

habe ich versucht, dieses:

model = Event 

"#{model}".where(name: 'xyz') 

Aber das wirft eine "undefinierte Methode`, wo 'für "Event": String "Fehler. Wie speichere ich das Modell in einer Variablen? Vielen Dank im Voraus

Antwort

1

Wenn Sie gehen, um Benutzer die Modellnamen Pass, wenn diese Art von Abfragen zu machen, schlage ich vor, Whitelisting sie:

def find_information(klass_string, query) 
    whitelisted_classes = %w(Event Blog Post) 
    if whitelisted_classes.include?(klass_string) 
    klass = klass_string.constantize 
    result = klass.where(query) 
    end 
end 

Ich weiß es nicht voll ist, was Sie gebeten, so zu beantworten, Ihr ursprüngliche Frage, wenn Sie eine Klasse als eine Variable übergeben, dann können Sie es sofort verwenden

klass = Event 
klass.where(query) 
2

Sie machen eine Anfrage an das Namensattribut mit der Zeichenfolge 'word'

information = model.where(name: 'word') 

Sie sollten das Argument mit word abfragen.

def find_information (model, word) 
    information = model.where(name: word) 
end 

Das funktioniert für mich.
Hoffe diese Hilfe.

Verwandte Themen