2015-06-30 122 views
0

Materialise的活動記錄對象我有一個基本的活動查詢像這樣:與包括協會

m = Movie.includes(:genres) 

m.genders是在這種情況下的CollectionProxy。有沒有一種方法可以把它作爲一個數組?

我知道調用to_a可以做到這一點,但這對於一系列包含來說是不切實際的。

+0

'CollectionProxy'已經就像一個數組,爲什麼你需要將其轉換? – infused

+0

@infused如果我緩存'm',那麼它會執行下一次我獲取緩存值的性別選擇 – Calin

回答

0

,它可以像這樣

Movie.includes(:genders).joins(:genders).all 

這將包括使用連接所以會出現只有一個查詢來獲取所有的電影和他們的性別所有性別來完成。

請注意,您的電影模式應該有

has_many :genders 

而且您的性別模式應該有

belongs_to :movies 
+0

感謝您的回答,但它並沒有真正回答我的問題,'m.genres'仍然是一個CollectionProxy和緩存它不起作用。 – Calin

+0

我認爲你應該更新你的問題,因爲它沒有提到緩存。緩存將實際上工作。只需將你的項目放到這樣的緩存中:Rails.cache.write(:movies,Movies.includes(:genders).joins(:gender).all),然後像下面這樣讀取它:Rails.cache.read(:movies )。當您第一次迭代時,它只會評估一次SQL。如果您想在寫入時評估SQL,那麼只需追加to_a即可。另外請確保緩存已啓用(默認情況下在開發中禁用)。你可以這樣做:config.action_controller.perform_caching = true。 –