Materialise的活動記錄對象我有一個基本的活動查詢像這樣:與包括協會
m = Movie.includes(:genres)
m.genders
是在這種情況下的CollectionProxy
。有沒有一種方法可以把它作爲一個數組?
我知道調用to_a
可以做到這一點,但這對於一系列包含來說是不切實際的。
Materialise的活動記錄對象我有一個基本的活動查詢像這樣:與包括協會
m = Movie.includes(:genres)
m.genders
是在這種情況下的CollectionProxy
。有沒有一種方法可以把它作爲一個數組?
我知道調用to_a
可以做到這一點,但這對於一系列包含來說是不切實際的。
,它可以像這樣
Movie.includes(:genders).joins(:genders).all
這將包括使用連接所以會出現只有一個查詢來獲取所有的電影和他們的性別所有性別來完成。
請注意,您的電影模式應該有
has_many :genders
而且您的性別模式應該有
belongs_to :movies
感謝您的回答,但它並沒有真正回答我的問題,'m.genres'仍然是一個CollectionProxy和緩存它不起作用。 – Calin
我認爲你應該更新你的問題,因爲它沒有提到緩存。緩存將實際上工作。只需將你的項目放到這樣的緩存中:Rails.cache.write(:movies,Movies.includes(:genders).joins(:gender).all),然後像下面這樣讀取它:Rails.cache.read(:movies )。當您第一次迭代時,它只會評估一次SQL。如果您想在寫入時評估SQL,那麼只需追加to_a即可。另外請確保緩存已啓用(默認情況下在開發中禁用)。你可以這樣做:config.action_controller.perform_caching = true。 –
'CollectionProxy'已經就像一個數組,爲什麼你需要將其轉換? – infused
@infused如果我緩存'm',那麼它會執行下一次我獲取緩存值的性別選擇 – Calin