Methods
Public Instance
Attributes
sti_dataset | [R] |
The base dataset for STI, to which filters are added to get only the models for the specific STI subclass. |
sti_key | [R] |
The column name holding the STI key for this model |
sti_key_array | [R] |
|
sti_key_chooser | [R] |
A proc which returns the value to use for new instances. This defaults to a lookup in the key map. |
sti_key_map | [R] |
A hash/proc with class keys and column value values, mapping the class to a particular value given to the |
sti_model_map | [R] |
A hash/proc with column value keys and class values, mapping the value of the |
Public Instance methods
Freeze STI information when freezing model class. Note that because of how STI works, you should not freeze an STI subclass until after all subclasses of it have been created.
# File lib/sequel/plugins/single_table_inheritance.rb 158 def freeze 159 @sti_key_array.freeze if @sti_key_array 160 @sti_key_map.freeze if @sti_key_map.is_a?(Hash) 161 @sti_model_map.freeze if @sti_model_map.is_a?(Hash) 162 163 super 164 end
Return the sti class based on one of the keys from sti_model_map.
# File lib/sequel/plugins/single_table_inheritance.rb 173 def sti_class_from_sti_key(key) 174 sti_class(sti_model_map[key]) 175 end
Return an instance of the class specified by sti_key
, used by the row_proc.
# File lib/sequel/plugins/single_table_inheritance.rb 168 def sti_load(r) 169 sti_class_from_sti_key(r[sti_key]).call(r) 170 end
Make sure that all subclasses of the parent class correctly include keys for all of their descendant classes.
# File lib/sequel/plugins/single_table_inheritance.rb 179 def sti_subclass_added(key) 180 if sti_key_array 181 key_array = Array(key) 182 Sequel.synchronize{sti_key_array.push(*key_array)} 183 superclass.sti_subclass_added(key) 184 end 185 end