用rails activerecord重写原始sql查询

时间:2011-10-19 20:58:16

标签: 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

重写它

其他信息car belongs_to manufacturer manufacturer has_many cars

2 个答案:

答案 0 :(得分:1)

是的,你可以:

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} 

答案 1 :(得分:-1)

您不以这种方式执行查询。您不查询表而是查询对象:

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