Method: Sequel::Model::ClassMethods#set_dataset

Defined in:
lib/sequel/model/base.rb

#set_dataset(ds, opts = {}) ⇒ Object Also known as: dataset=

Sets the dataset associated with the Model class. ds can be a Symbol (specifying a table name in the current database), or a Dataset. If a dataset is used, the model’s database is changed to the given dataset. If a symbol is used, a dataset is created from the current database with the table name given. Other arguments raise an Error. Returns self.

This changes the row_proc of the given dataset to return model objects, extends the dataset with the dataset_method_modules, and defines methods on the dataset using the dataset_methods. It also attempts to determine the database schema for the model, based on the given dataset.



271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/sequel/model/base.rb', line 271

def set_dataset(ds, opts={})
  inherited = opts[:inherited]
  @dataset = case ds
  when Symbol
    @simple_table = db.literal(ds)
    db[ds]
  when Dataset
    @simple_table = nil
    @db = ds.db
    ds
  else
    raise(Error, "Model.set_dataset takes a Symbol or a Sequel::Dataset")
  end
  @dataset.row_proc = Proc.new{|r| load(r)}
  if inherited
    @simple_table = superclass.simple_table
    @columns = @dataset.columns rescue nil
  else
    @dataset_method_modules.each{|m| @dataset.extend(m)} if @dataset_method_modules
    @dataset_methods.each{|meth, block| @dataset.meta_def(meth, &block)} if @dataset_methods
  end
  @dataset.model = self if @dataset.respond_to?(:model=)
  begin
    @db_schema = (inherited ? superclass.db_schema : get_db_schema)
  rescue Sequel::DatabaseConnectionError
    raise
  rescue
    nil
  end
  self
end