2015-02-23 4 views
0

У меня есть активный запрос записи, который не использует индекс, что приводит к таймаутам приложений.Вручное создание объектов активной записи

domain.services.where.not(parent_service_id: nil).group('services.type').select('services.type, count(services.id) as user_count') 

=> [#<ServiceModel id: nil, type: "ServiceModelName">] 

У меня есть пользовательские команды SQL, которая заставляет использование индекса на parent_service_id

ActiveRecord::Base.connection.execute("SELECT services.type, count(services.id) as user_count FROM services where domain_id = 21227 AND parent_service_id IS NOT NULL GROUP BY services.type") 

=> {"type"=>"ServiceModelName", "user_count"=>"2810"} 

Который возвращает информацию, мне нужно быстро. Однако он возвращает хеш вместо модели. Как создать объект activerecord, чтобы мой метод мог возвращать аналогичный результат?

+0

Показать SQL из журналов, которые производит первое утверждение. – smathy

+0

это мое будет полезно для вас [http://m.onkey.org/use-index-with-active-record-finders](http://m.onkey.org/use-index-with-active-record -finders) –

ответ

0

Вместо connection.execute, вы просто должны быть в состоянии сделать:

ServiceModel.find_by_sql(sql) 
Смежные вопросы