2014-01-13 69 views
10

我有以下型號:導軌 - 加入多個表

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 

我試圖聯合起來一切成的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 

對我來說關鍵的問題是goods_movement date == price_movement date的第二個鏈接。 有人可以諮詢有沒有辦法做到這一點?

回答

17
Company.joins(:price_movements,:goods_movements).where("goods_movement.date = price_movement.date") 

經過this link它有詳細的如何使用ActiveRecord

+2

只是一個額外的問題說明:在效率方面,因爲這兩個表是巨大的,首先,這ActiveRecord的查詢需要8000MS相比SQL在3000毫秒內完成。有什麼方法可以在ActiveRecord中稍微加快一點嗎?我在後者使用ActiveRecord :: Base.connection.execute()。 – mingsheng