Ruby 始终与实体关联

Ruby 始终与实体关联,ruby,activerecord,Ruby,Activerecord,在加载实体时,是否可以始终急于加载关联。比如说 class Book has_many :chapters end class Chapters belongs_to :book end book = Book.find_by_title('Moby Dick') 我知道您可以在调用find ie时急切地加载。按标题查找('Moby Dick',:include=>:chapters),但在这种情况下,我知道,每当我找到一本书时,我总是希望急切地加载章节,而不需要记住:includ

在加载实体时,是否可以始终急于加载关联。比如说

class Book
  has_many :chapters
end

class Chapters
  belongs_to :book
end

book = Book.find_by_title('Moby Dick')
我知道您可以在调用find ie时急切地加载。按标题查找('Moby Dick',:include=>:chapters),但在这种情况下,我知道,每当我找到一本书时,我总是希望急切地加载章节,而不需要记住
:include=>
参数。

您可以包含一个“默认范围”在你的模型中

对于Rails 4:

class Book
  has_many :chapters
  default_scope { includes(:chapters) }
end
对于Rails 3:

class Book
  has_many :chapters
  default_scope includes(:chapters)
end
对于Rails 2:

class Book
  has_many :chapters
  default_scope :include => :chapters
end

对于Rails 4:default\u scope{includes(:chapters)}
default\u scope{includes(:chapters)}
似乎不适用于我的Rails 4.2.x,并且抛出了一个
错误数量的参数(0代表1)
,但是
default\u scope->{includes(:chapters)}
为您工作过吗me@CyrilDD这是令人惊讶的——4.2.1的文档说,
default\u scope{…}
仍然有效(即,您仍然可以向它传递一个块而不是一个proc)啊,我想我知道了,这可能是因为我使用的是Mongoid而不是ActiveRecord。因此,对于Mongoid用户,不允许使用任何块:(.编辑:是的,提及的默认范围只能是标准或过程