module Sequel::Plugins::ClassTableInheritance::InstanceMethods

Public Instance Methods

before_validation() click to toggle source

Set the sti_key column based on the sti_key_map.

Calls superclass method
    # File lib/sequel/plugins/class_table_inheritance.rb
387 def before_validation
388   if new? && (set = self[model.sti_key])
389     exp = model.sti_key_chooser.call(self)
390     if set != exp
391       set_table = model.sti_class_from_key(set).cti_table_name
392       exp_table = model.sti_class_from_key(exp).cti_table_name
393       set_column_value("#{model.sti_key}=", exp) if set_table != exp_table
394     end
395   end
396   super
397 end
delete() click to toggle source

Delete the row from all backing tables, starting from the most recent table and going through all superclasses.

    # File lib/sequel/plugins/class_table_inheritance.rb
378 def delete
379   raise Sequel::Error, "can't delete frozen object" if frozen?
380   model.cti_models.reverse_each do |m|
381     cti_this(m).delete
382   end
383   self
384 end

Private Instance Methods

_insert() click to toggle source

Insert rows into all backing tables, using the columns in each table.

Calls superclass method
    # File lib/sequel/plugins/class_table_inheritance.rb
407 def _insert
408   return super if model.cti_models[0] == model
409   model.cti_models.each do |m|
410     v = {}
411     m.cti_table_columns.each{|c| v[c] = @values[c] if @values.include?(c)}
412     ds = use_server(m.cti_instance_dataset)
413     if ds.supports_insert_select? && (h = ds.insert_select(v))
414       @values.merge!(h)
415     else
416       nid = ds.insert(v)
417       @values[primary_key] ||= nid
418     end
419   end
420   @values[primary_key]
421 end
_update(columns) click to toggle source

Update rows in all backing tables, using the columns in each table.

Calls superclass method
    # File lib/sequel/plugins/class_table_inheritance.rb
424 def _update(columns)
425   return super if model.cti_models[0] == model
426   model.cti_models.each do |m|
427     h = {}
428     m.cti_table_columns.each{|c| h[c] = columns[c] if columns.include?(c)}
429     unless h.empty?
430       ds = cti_this(m)
431       n = ds.update(h)
432       raise(NoExistingObject, "Attempt to update object did not result in a single row modification (SQL: #{ds.update_sql(h)})") if require_modification && n != 1
433     end
434   end
435 end
cti_this(model) click to toggle source
    # File lib/sequel/plugins/class_table_inheritance.rb
401 def cti_this(model)
402   use_server(model.cti_instance_dataset.where(model.primary_key_hash(pk)))
403 end