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
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/sequel/model/base.rb', line 181 def Model(source) if cache_anonymous_models cache = Sequel.synchronize{@Model_cache ||= {}} if klass = Sequel.synchronize{cache[source]} return klass end end klass = Sequel.set_temp_name(Class.new(self)){"Sequel::_Model(#{source.inspect})"} 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 |