Ruby on rails 使用rails activerecord重写原始sql查询

Ruby on rails 使用rails activerecord重写原始sql查询,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,orm,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Orm,我是rails和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重写它 附加信息:汽车属于制造商制造商拥有许多汽车

我是rails和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.count # the count on your query
Car.find_each do |car|
  # do something with car.manufacturer.name
  # and car.manufacturer.id
end
是的,你可以:

Manufacturer.select("m.name, m.id, count(*) as count").
  joins(:cars).group(:manufacturer_id)
但您也可以在制造商属性上使用计数器缓存“cars\u count”,或者使用ruby(而不是mysql)进行计数:


复制(有点):但是,让我补充一点,使用Rails3+Arel,您可以得到一个更漂亮的解决方案。谢谢你,托克兰,我会看的!在我尝试进行一些优化时,它需要额外的sql查询和巨大的内存使用
Manufacturer.includes(:car).each {|manufacturer| manufacturer.cars.size}