Method: Sequel::Model::ClassMethods#Model
- Defined in:
- lib/sequel/model/base.rb
#Model(source) ⇒ Object
Lets you create a Model subclass with its dataset already set. source should be an instance of one of the following classes:
- Database
-
Sets the database for this model to
source. Generally only useful when subclassing directly from the returned class, where the name of the subclass sets the table name (which is combined with theDatabaseinsourceto create the dataset to use) - Dataset
-
Sets the dataset for this model to
source. - other
-
Sets the table name for this model to
source. The class will use the default database for model classes in order to create the dataset.
The purpose of this method is to set the dataset/database automatically for a model class, if the table name doesn’t match the default table name that Sequel would use.
When creating subclasses of Sequel::Model itself, this method is usually called on Sequel itself, using Sequel::Model(:something).
# Using a symbol
class Comment < Sequel::Model(:something)
table_name # => :something
end
# Using a dataset
class Comment < Sequel::Model(DB1[:something])
dataset # => DB1[:something]
end
# Using a database
class Comment < Sequel::Model(DB1)
dataset # => DB1[:comments]
end
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/sequel/model/base.rb', line 197 def Model(source) if cache_anonymous_models cache = Sequel.synchronize{@Model_cache ||= {}} if klass = Sequel.synchronize{cache[source]} return klass end end klass = Class.new(self) if source.is_a?(::Sequel::Database) klass.db = source else klass.set_dataset(source) end if cache_anonymous_models Sequel.synchronize{cache[source] = klass} end klass end |