DatasetMethods
contains methods that all model datasets have.
Public Instance methods
Assume if a single integer is given that it is a lookup by primary key, and call with_pk
with the argument.
Artist.dataset[1] # SELECT * FROM artists WHERE (id = 1) LIMIT 1
# File lib/sequel/model/base.rb 2132 def [](*args) 2133 if args.length == 1 && (i = args[0]) && i.is_a?(Integer) 2134 with_pk(i) 2135 else 2136 super 2137 end 2138 end
This allows you to call as_hash
without any arguments, which will result in a hash with the primary key value being the key and the model object being the value.
Artist.dataset.as_hash # SELECT * FROM artists # => {1=>#<Artist {:id=>1, ...}>, # 2=>#<Artist {:id=>2, ...}>, # ...}
# File lib/sequel/model/base.rb 2191 def as_hash(key_column=nil, value_column=nil, opts=OPTS) 2192 if key_column 2193 super 2194 else 2195 raise(Sequel::Error, "No primary key for model") unless model && (pk = model.primary_key) 2196 super(pk, value_column, opts) 2197 end 2198 end
Destroy each row in the dataset by instantiating it and then calling destroy on the resulting model object. This isn’t as fast as deleting the dataset, which does a single SQL
call, but this runs any destroy hooks on each object in the dataset.
Artist.dataset.destroy # DELETE FROM artists WHERE (id = 1) # DELETE FROM artists WHERE (id = 2) # ...
# File lib/sequel/model/base.rb 2149 def destroy 2150 pr = proc{all(&:destroy).length} 2151 model.use_transactions ? @db.transaction(:server=>opts[:server], &pr) : pr.call 2152 end
If there is no order already defined on this dataset, order it by the primary key and call last.
Album.last # SELECT * FROM albums ORDER BY id DESC LIMIT 1
# File lib/sequel/model/base.rb 2159 def last(*a, &block) 2160 if ds = _primary_key_order 2161 ds.last(*a, &block) 2162 else 2163 super 2164 end 2165 end
The model class associated with this dataset
Artist.dataset.model # => Artist
# File lib/sequel/model/base.rb 2124 def model 2125 @opts[:model] 2126 end
If there is no order already defined on this dataset, order it by the primary key and call paged_each.
Album.paged_each{|row| } # SELECT * FROM albums ORDER BY id LIMIT 1000 OFFSET 0 # SELECT * FROM albums ORDER BY id LIMIT 1000 OFFSET 1000 # SELECT * FROM albums ORDER BY id LIMIT 1000 OFFSET 2000 # ...
# File lib/sequel/model/base.rb 2175 def paged_each(*a, &block) 2176 if ds = _primary_key_order 2177 ds.paged_each(*a, &block) 2178 else 2179 super 2180 end 2181 end
Alias of as_hash
for backwards compatibility.
# File lib/sequel/model/base.rb 2201 def to_hash(*a) 2202 as_hash(*a) 2203 end
Given a primary key value, return the first record in the dataset with that primary key value. If no records matches, returns nil.
# Single primary key Artist.dataset.with_pk(1) # SELECT * FROM artists WHERE (artists.id = 1) LIMIT 1 # Composite primary key Artist.dataset.with_pk([1, 2]) # SELECT * FROM artists WHERE ((artists.id1 = 1) AND (artists.id2 = 2)) LIMIT 1
# File lib/sequel/model/base.rb 2215 def with_pk(pk) 2216 if pk && (loader = _with_pk_loader) 2217 loader.first(*pk) 2218 else 2219 first(model.qualified_primary_key_hash(pk)) 2220 end 2221 end
Same as with_pk
, but raises NoMatchingRow
instead of returning nil if no row matches.
# File lib/sequel/model/base.rb 2225 def with_pk!(pk) 2226 with_pk(pk) || raise(NoMatchingRow.new(self)) 2227 end