Rails - Joining multiple tables

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

Go through this link it has detailed explanation of how to use ActiveRecord

Share:
63,155

Related videos on Youtube

mingsheng
Author by

mingsheng

Updated on July 09, 2022

Comments

  • mingsheng
    mingsheng almost 2 years

    I have the following models:

    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
    

    I am trying to join everything together into an sql in the form of activerecord, but I'm not sure how to go about doing it because I'm relatively new to 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
    

    The key problem for me is the second link where goods_movement date == price_movement date. Can someone advice on whether there's any way to do it?

  • mingsheng
    mingsheng over 10 years
    Just an additional question: In terms of efficiency, because the two tables are huge to begin with, this ActiveRecord query takes 8000ms compared to the sql that completes in 3000ms. Is there any ways to speed things up a little in ActiveRecord? I am using ActiveRecord::Base.connection.execute() in the latter.
  • Qaiser Wali
    Qaiser Wali about 6 years
    What would be the way to go about getting the records from PriceMovement and GoodsMovement where Company id is 1?