Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具体化包含关联的活动记录对象_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 具体化包含关联的活动记录对象

Ruby on rails 具体化包含关联的活动记录对象,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个基本的活动查询,如下所示: m = Movie.includes(:genres) m、 在本例中,genders是一个CollectionProxy。有没有办法把它做成数组 我知道打电话给_a可以做到这一点,但这对于许多include来说是不现实的。可以这样做 Movie.includes(:genders).joins(:genders).all 它将使用join包含所有性别,因此只需一个查询即可获取所有电影及其性别 请注意,您的电影模型应该具有 has_many :gender

我有一个基本的活动查询,如下所示:

m = Movie.includes(:genres)
m、 在本例中,genders是一个CollectionProxy。有没有办法把它做成数组


我知道打电话给_a可以做到这一点,但这对于许多include来说是不现实的。

可以这样做

Movie.includes(:genders).joins(:genders).all
它将使用join包含所有性别,因此只需一个查询即可获取所有电影及其性别

请注意,您的电影模型应该具有

has_many :genders
belongs_to :movies
你的性别模型应该有

has_many :genders
belongs_to :movies

CollectionProxy已经像数组一样工作了,为什么需要转换它?@infused如果我缓存m,那么下次我获取缓存的值时,它将执行select from genders。谢谢你的回答,但它确实没有回答我的问题,m.genres仍然是CollectionProxy,缓存不起作用。我认为你应该更新你的问题,因为它没有提到缓存。缓存实际上可以工作。只需像这样将项目放入缓存:Rails.cache.write:movies,movies.includes:genders.joins:genders.all,然后像这样读取:Rails.cache.read:movies。当您第一次迭代时,它只会对SQL求值一次。如果您想在编写时对SQL进行求值,那么只需将其附加到a。另外,请确保在开发中默认启用缓存,并禁用缓存。您可以这样做:config.action\u controller.perform\u caching=true。