2012-07-30 9 views
6

Manchmal muss ich viele Daten in DB für die Datenverarbeitung abfragen.Wie Abfragen von Daten ohne Modell in Rails erstellen?

Zum Beispiel habe ich eine Tabelle: Aktivität, ich möchte alle Benutzer finden, die,

ich nur bin besorgt über die Datenfelder Aktivität in den letzten Monaten zu erstellen, und ich will nicht schaffen eine Menge von Activity-Modellen,

Gibt es eine Möglichkeit, ich kann es tun?

wie dieser Code:

Activity.where('created_at > ?', Time.now - 1.month).get_data(:user_id, :created_at) 
=> [[1, 2012-02-01] .... ] 
+1

Ich bin verwirrt auf Ihre Formulierung. "{Sie} möchten keine Aktivitätsmodelle erstellen" "Ich kümmere mich nur um die Datenfelder"? Nicht sicher ob ich verstehe. Warum würden Sie Modelle erstellen, indem Sie eine Abfrage durchführen? – Trip

+0

Wollen Sie sagen, dass Sie Ihre DB mit schienenähnlichen Bedingungen abfragen wollen, aber nicht alle diese Schienenmodelle erstellen möchten? – Bornfree

+0

@Bornfree Ja. Ich denke, es ist ein sehr häufiges Szenario. – linjunhalida

Antwort

6

versuchen, diesen Ansatz:

sql = "SELECT * from activities limit 10" 
result = ActiveRecord::Base.connection.execute(sql) 
result.to_a 

ich über SQL-Abfrage nicht sicher bin, aber ich denke, Sie bekommen die Idee.

+0

Es funktioniert! Ich aktualisiere den Code jetzt. – linjunhalida

0

Versuchen:

Activity.where(['activities.user_id = ? 
       AND activities.created_at BETWEEN ? 
       AND ?', users, 1.month.ago, Time.zone.now]) 

Dies wird alle Aktivitäten zurück, die für eine Gruppe von Benutzern im vergangenen Monat erstellt wurde. Das einzige potenzielle Problem bei dieser Abfrage besteht in extrem großen Datenmengen. Möglicherweise möchten Sie ein names_scope verwenden, um die Aktivitäten einzugrenzen, bevor Sie diese Abfrage ausführen, damit nicht jede Aktivität in der Datenbank durchsucht wird.