【问题标题】:rewriting raw sql query with rails activerecord使用 rails activerecord 重写原始 sql 查询
【发布时间】:2011-12-11 07:09:41
【问题描述】:

我是 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 manufacturermanufacturer has_many cars

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord orm


【解决方案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} 

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 当我尝试做一些优化时,它需要额外的 sql 查询和巨大的内存使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2021-02-11
    • 2016-10-20
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多