2012-07-30 11 views
6

Czasami potrzebuję zapytać wiele danych w DB dla przetwarzania danych.Jak wyszukiwać dane bez modelu tworzenia w Railsach?

Na przykład mam tabeli: Aktywność, Chcę znaleźć wszystkich użytkowników, które tworzą aktywność w ostatnim miesiącu,

Obawiam się tylko o macierze danych, i nie chcę, aby utworzyć wiele modeli Aktywności,

Czy mogę to zrobić?

jak ten kod:

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

Jestem zdezorientowany pod względem brzmienia. "{You} nie chcesz tworzyć modeli aktywności" "Obawiam się tylko o tablice danych"? Nie jestem pewien, czy rozumiem. Dlaczego chcesz tworzyć modele, wykonując zapytanie? – Trip

+0

Chcesz przekazać zapytanie do DB z warunkami podobnymi do szyn, ale nie chcesz tworzyć tych wszystkich modeli szyn? – Bornfree

+0

@Bornfree Tak. Myślę, że to bardzo powszechny scenariusz. – linjunhalida

Odpowiedz

6

Spróbuj podejście:

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

nie jestem pewien o zapytania SQL, ale myślę, że masz pomysł.

+0

To działa! Teraz mam kod. – linjunhalida

0

Spróbuj:

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

ten powróci wszystkich działań, które zostały utworzone w ciągu ostatniego miesiąca do zestawu użytkowników. Jedyny potencjalny problem z tym zapytaniem dotyczy bardzo dużych zestawów danych. Możesz użyć parametru named_scope, aby zawęzić działania przed uruchomieniem tego zapytania, aby nie przeszukiwać wszystkich działań w db.

Powiązane problemy