переписать сырой sql запрос с помощью rails activerecord - PullRequest
1 голос
/ 20 октября 2011

Я новичок с рельсами и activerecord, поэтому иногда у меня возникают проблемы, подобные этой.У меня есть запрос mysql:

select m.name, m.id, count(*) as count
from cars c
left join manufacturers m on c.manufacturer_id = m.id
group by c.manufacturer_id

, который возвращает 3 значения в строке

, как это можно переписать с помощью rails activerecord orm

дополнительная информация :car belongs_to manufacturer manufacturer has_many cars

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Да, вы можете:

Manufacturer.select("m.name, m.id, count(*) as count").
  joins(:cars).group(:manufacturer_id)

Но вы также можете иметь счетчик кэша "cars_count" в атрибутах вашего производителя или считать с помощью ruby ​​(вместо mysql):

Manufacturer.includes(:car).each {|manufacturer| manufacturer.cars.size} 
0 голосов
/ 20 октября 2011

Вы не выполняете запрос таким образом. Вы не запрашиваете таблицы, но объекты:

Car.count # the count on your query
Car.find_each do |car|
  # do something with car.manufacturer.name
  # and car.manufacturer.id
end
...