Module: Sequel::Plugins::LazyAttributes

Defined in:
lib/sequel/plugins/lazy_attributes.rb

Overview

The lazy_attributes plugin allows users to easily set that some attributes should not be loaded by default when loading model objects. If the attribute is needed after the instance has been retrieved, a database query is made to retreive the value of the attribute.

This plugin depends on the tactical_eager_loading plugin, and allows you to eagerly load lazy attributes for all objects retrieved with the current object. So the following code should issue one query to get the albums and one query to get the reviews for all of those albums:

Album.plugin :lazy_attributes, :review
Album.where{id < 100}.all do |a|
  a.review
end

# You can specify multiple columns to lazily load:
Album.plugin :lazy_attributes, :review, :tracklist

Note that by default on databases that supporting RETURNING, using explicit column selections will cause instance creations to use two queries (insert and refresh) instead of a single query using RETURNING. You can use the insert_returning_select plugin to automatically use RETURNING for instance creations for models using the lazy_attributes plugin.

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Class Method Summary collapse

Class Method Details

.apply(model, *attrs) ⇒ Object

Lazy attributes requires the tactical_eager_loading plugin



31
32
33
# File 'lib/sequel/plugins/lazy_attributes.rb', line 31

def self.apply(model, *attrs)
  model.plugin :tactical_eager_loading  
end

.configure(model, *attrs) ⇒ Object

Set the attributes given as lazy attributes



36
37
38
# File 'lib/sequel/plugins/lazy_attributes.rb', line 36

def self.configure(model, *attrs)
  model.lazy_attributes(*attrs) unless attrs.empty?
end