Class: FlexiRecordDemo::Medium

Inherits:
FlexiRecord::BaseRecord show all
Defined in:
lib/flexirecord-demo.rb

Overview

A Medium (demo class).

CREATE TABLE “medium” (“number” int8 primary key, “lent_to_id” int8 references “person” (“id”) on delete restrict on update cascade );

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from FlexiRecord::BaseRecord

#[], #[]=, add_connected_references, add_many_to_one_reference, add_one_to_one_reference, add_read_option, autodetect_columns, columns, connection_pool, connection_pool=, db_execute, db_query, db_query1, #delete_from_cache, #destroy, #dup, #has_key?, #inspect, isolation_level, loader, lock, #method_missing, prepare_read_parameters, primary_columns, #read, read_option_value, reader, reader_attrs, #reload, #replace, #saved?, schema_name, schema_name!, schema_name=, select, select1, select_by_value_set, #set, set_loader, set_reader, set_setter, setter, sql, sql1, table, table_name, table_name!, table_name=, thread_connection_pool, thread_connection_pool=, #to_s, transaction, #transaction, transaction?, #update, use_connection, #used_columns

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class FlexiRecord::BaseRecord

Class Method Details

.after_select(records) ⇒ Object



33
34
35
36
37
38
# File 'lib/flexirecord-demo.rb', line 33

def self.after_select(records)
  super
  records.preload(:entries).preload(:movie)
  records.preload(:lent_to)
  records.preload(:movies)
end

Instance Method Details

#available?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/flexirecord-demo.rb', line 55

def available?
  lent_to.nil?
end

#saveObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/flexirecord-demo.rb', line 39

def save
  if self.number == :auto
    self.class.transaction self, :read_committed do
      self.class.db_execute("LOCK TABLE #{self.class.table} IN SHARE ROW EXCLUSIVE MODE")
      last_medium = Medium.select1('ORDER BY "number" DESC LIMIT 1')
      self.number = if last_medium
        last_medium.number + 1
      else
        1
      end
      return super
    end
  else
    return super
  end
end