ActiveRecord关系不返回子记录

时间:2014-10-02 15:59:12

标签: ruby-on-rails ruby activerecord

我是Ruby的新手,我遇到了这样的问题:

我已经定义了四个模型,如下所示:

class Artist < ActiveRecord::Base
   has_many :albums
end

class Album < ActiveRecord::Base
   has_many :tracks
   has_many :covers
   belongs_to :artist
end

class Cover < ActiveRecord::Base
   belongs_to :album
end

class Track < ActiveRecord::Base
   belongs_to :album
end

当我进入rails控制台时,我可以查询所有类,但是,当我查询艺术家时,即

a = Artist.find(1)

我得到以下

irb(main):001:0> a = Artist.find(1)
   Artist Load (1.0ms)  SELECT  `artists`.* FROM `artists`  WHERE `artists`.`id` = 1 LIMIT 1
   => #<Artist id: 1, name: "Sound Storm", genre: "Rock", country: "Italy">

我想,当我查询一位艺术家时,它应该根据定义的关系带来所有专辑......我错了吗?

1 个答案:

答案 0 :(得分:1)

Rails(不是Ruby)使用延迟加载。因此,在您要求之前,它不会对相册进行查询。因此,在执行a = Artist.find(1)后,请尝试a.albums。它的工作方式是这样的,因为当你可能只想要主要记录中的某些内容时,你并不总是想要在所有关联中运输的开销。

当您执行a.albums时,即使您还没有发出查询(或查询),直到您开始实际使用代码中的相册。例如。 a.albums.first.name。再次,懒惰加载工作。