我是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">
我想,当我查询一位艺术家时,它应该根据定义的关系带来所有专辑......我错了吗?
答案 0 :(得分:1)
Rails(不是Ruby)使用延迟加载。因此,在您要求之前,它不会对相册进行查询。因此,在执行a = Artist.find(1)
后,请尝试a.albums
。它的工作方式是这样的,因为当你可能只想要主要记录中的某些内容时,你并不总是想要在所有关联中运输的开销。
当您执行a.albums
时,即使您还没有发出查询(或查询),直到您开始实际使用代码中的相册。例如。 a.albums.first.name
。再次,懒惰加载工作。