Вы можете сделать что-то простое с помощью стандартного интерфейса запросов ActiveRecord:
results = MyObject.select('name, count(*) as how_many')
.group(:name)
.order(:how_many)
# And later...
results.each do |o|
puts "#{o.name} has #{o.how_many}"
end
, поэтому вам не придется прибегать к SQL.
Как уже упоминалось, есть и другие.find_by_sql
, если вы хотите использовать SQL-запрос для создания экземпляра набора объектов модели на основе SQL-запроса.
Если у вас есть какой-либо SQL-запрос, который собирает данные из нескольких таблиц или содержит вещи, которые AR не поддерживаетхорошо (подвыборы, производные таблицы, ...), тогда вы можете отодвинуть ActiveRecord и поговорить напрямую с базой данных:
connection.select_rows('some big pile of sql').each do |r|
# r will be an array of strings so you have to pull
# it apart and sort out the types by hand
end
Использование select_rows
также может быть полезно, если выкодирует большую кучу данных прямо в JSON (или аналогичную) и не нуждается в тонкостях ActiveRecord и не хочет оплачивать накладные расходы при использовании ActiveRecord.