2010-08-31 3 views
0

В Rails 2.3.8 существует метод класса ActiveRecord::Base.count_by_sql, который позволяет выполнять пользовательские настройки SELECT count(*) .... Сохраняется ли это для выполнения запрошенного запроса SELECT sum(...) ... с помощью этого метода? Если нет, что нужно сделать для выполнения такого запроса? Есть ActiveRecord::Base.connection.execute Единственный вариант?Каков наилучший способ выполнения `sum_by_sql`?

Спасибо.

EDIT: запрос, который я хочу выполнить, имеет другой запрос, вложенный. Вот почему я считаю, что методов от ActiveRecord::Calculations недостаточно.

ответ

0

select_value из ActiveRecord::ConnectionAdapters::DatabaseStatements модуля является ответом. Он возвращает значение, присутствующее в первом столбце первой строки, возвращаемой запросом. select_value возвращает String, поэтому преобразование может быть необходимо.

Пример:

ActiveRecord::Base.connection.select_value("Some complicated sql") 
0

Проверить ActiveRecord::Calculations. Документы API: here.

Вы можете сделать что-то вроде этого (предполагая, что у вас есть User модель):

User.maximum(:updated_at) 
# Generates: 
# SELECT max(`users`.updated_at) AS max_updated_at FROM `users` 
+0

Спасибо за ответ, но это не достаточно, в моем случае. Я не упоминал об этом достаточно ясно, но мне нужно передать сырой SQL (по крайней мере, я так думаю). Мой запрос имеет другой запрос, вложенный, выглядит следующим образом: 'SELECT MAX (...) FROM (здесь идет вложенный запрос, от которого я не могу избавиться)'. Вот почему мне нужен такой метод, как 'count_by_sql'. – skalee

Смежные вопросы