2011-06-29 42 views
2

我想看看後面AREL語句SQL:如何使用「包括」在Rails 3 AREL聲明?

Brand.where(:subdomain => "coke").includes(:products).to_sql 

品牌的has_many產品,產品belongs_to的品牌。

然而,只有上述聲明產量:

"SELECT `brands`.* FROM `brands` WHERE `brands`.`subdomain` = 'coke'" 

爲什麼我看不到在SQL中products表中的信息?

回答

6

當您使用includes語句時,Rails將爲每個表生成一個單獨的查詢(因此如果包含2個其他表,則總共會有3個查詢)。

您可以使用joins語句來代替,它會將其所有的結塊成一個查詢,但是您可能會遇到性能問題。另外,如果你的任何where(...)條件對包括表查詢,它將被集中到一個查詢。

對Rails的行爲的詳細信息,請參閱this other similar question

+2

呃,如果有在引用此表的查詢的條件也不會產生每桌一個單獨的查詢。相反,它將使用'LEFT OUTER JOIN'和一個查詢。 –

+0

這就是我說的......「如果有對包含表的條件查詢,它將被集中到一個查詢[而不是運行多個查詢]」 –

+0

AHHHH,在其他問題指着我真的把它帶回家我迪倫。如果它正在加入「包含」,它將爲主AR對象帶回冗餘數據。非常有意義,謝謝! – AKWF