4

我在Rails 3中使用ActiveRecord從兩個不同數據庫中的兩個不同表中提取數據。這些數據庫不能相互連接,但我需要事後做一個簡單的連接。我想保留這個關係,這樣我就可以把它關聯起來。如何在記錄返回後在ActiveRecord中進行連接?

這裏是我在做什麼

browsers = Browser.all # <-- this is fairly small and can reside in memory 
events = Event.where(:row_date=>Date.today).select(:name, :browser_id) 

簡化版本,所以你可以看到,我想加入browsers在上events關係,其中browser_id應該等於browsers.nameevents是一個關係,我仍然可以將子句添加到行中,所以我不想在db上運行查詢。我怎麼做到這一點?

編輯

對於那些希望看到我在下面接受了回答一些代碼,這裏是我想出了:

​​

會讓我得到瀏覽器以下列方式命名

get_todays_events.browser.name 

回答

2

我會通過使用一個包括:包括即試圖在Ruby中這樣做只會導致你悲傷。你可以鏈接到一個包括就好了。

+0

嗯,似乎新的軌道在內存中進行連接,而不是將其構建到SQL查詢中。謝謝你的提示! – 2010-06-08 22:01:15

0

joins確實創建SQL連接如預期在當前的Rails 5:

pry(main)> Customer.joins(:orders).limit(5) Customer Load (0.2ms) SELECT `customers`.* FROM `customers` INNER JOIN `orders` ON `orders`.`customer_id` = `customers`.`id` LIMIT 5 => [#<Customer:0x007fb869f11fe8 ...

這應該是大大快,因爲它只需要一個單獨的數據庫查詢,而includes將執行1 + <number of rows in first table> + <number of rows in second table>...

這裏有一個例子includes需要1750x只要joins

pry(main)> benchmark do 
    Order.joins(:address, :payments, :customer, :packages).all.size 
> 0.02456 seconds 

pry(main)> benchmark do 
[14] pry(main)* Order.includes(:address, :payments, :customer, :packages).all.map(&:zip).max 
[14] pry(main)*end 
=> 35.607257 seconds 
相關問題