2011-11-25 88 views
1

我剛開始使用rails。儘管如此,但還是有一些我還沒有掌握的東西。連接之間的區別,包含和關聯

其中之一是joins/includes和協會之間的互動。對於每個模型,您定義其關係(has_many,belongs_to等)到其他模型。這足以讓他們通過主鍵連接並找到彼此,對吧?

那麼使用joins/includes那麼有什麼意義呢?我自己的猜測是減少sql查詢並只獲取必要的對象,但我想清楚這一點。 是否聯想像範圍是order/where等。可修改的默認行爲種類?

真的想要這樣理順。

回答

0

Railscast #181 By Ryan Bates涵蓋了這一點。

實際上,join用於在數據庫服務器上有效地連接兩個表。但是,默認情況下,只有第一個表中的列包含在數據集中。您將使用join根據第二個表中的條件測試第一個表中的記錄。

一個include類似於加入,但會在第二個表中的行對於相關的任何記錄一個高效的數據檢索,並填充了Rails ActiveRecord緩存中的記錄。

所以,如果你有一個User類和Role類,其中User可以有一個Role連接到它,那麼無論是用戶和角色實例將被從數據庫中同時檢索。

用戶#5 =>指向=>角色#7

用戶#10 =>點以從用戶=>角色#12

檢索用戶#5和#10使用includes()表也將使用SQL查詢實例角色#7和#12,例如:

SELECT roles.* FROM roles WHERE id IN (7,12)