2015-06-30 165 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。 –