Rails - 连接多个表

min*_*eng 15 activerecord ruby-on-rails ruby-on-rails-4

我有以下型号:

class Company < ActiveRecord::Base
  has_many :price_movements
  has_many :goods_movements
end

class PriceMovement < ActiveRecord::Base
  belongs_to :company
end

class GoodsMovement < ActiveRecord::Base
   belongs_to :company
end
Run Code Online (Sandbox Code Playgroud)

我试图以activerecord的形式将所有内容组合成一个sql,但我不知道如何去做,因为我对ROR相对较新.

select * from companies c

inner join price_movements p
on c.id = p.company_id

inner join goods_movements g
on c.id = g.company_id
and g.date = p.date
Run Code Online (Sandbox Code Playgroud)

对我来说,关键问题是货物运动日期== price_movement日期的第二个环节.有人可以建议是否有办法吗?

Siv*_*iva 23

Company.joins(:price_movements,:goods_movements).where("goods_movement.date = price_movement.date")
Run Code Online (Sandbox Code Playgroud)

通过此链接,它详细解释了如何使用ActiveRecord

  • 还有一个问题:在效率方面,因为这两个表开始时很大,所以与在3000ms内完成的sql相比,这个ActiveRecord查询需要8000ms.有没有办法在ActiveRecord中加快速度?我在后者使用ActiveRecord :: Base.connection.execute(). (2认同)