Witam,
mam takie coś:
require_relative ‘database’
module JDB
class Model
include Database
class << self
protected def table_name(table_name) #remove_method :table if self.class.respond_to? :table define_singleton_method :table do table_name.to_sym end
self.metadata #if @@connection.respond_to? :get_meta_data end
def metadata rsh = @@connection.get_meta_data.get_columns(nil, nil, self.table.to_s, nil) col = [] while rsh.next col << rsh.get_object('COLUMN_NAME') end raise Exception, "Empty metadata for table #{self.table}" unless col.size > 0 define_singleton_method :columns do col end end
def inherited(child_class) child_class.table_name child_class.to_s.split('::')[-1].to_s.downcase.to_sym end
end
def initialize(obj = {}) if obj.size == 0 raise ArgumentError, "Unrecognized parameter: #{self.columns - obj.keys}" unless self.columns.include? obj.keys end end
end
end
require_relative ‘…/…/lib/model’
class CableModem < JDB::Model
table_name :v_cm
end
Chciałbym, żeby
child_class.table_name child_class.to_s.split(’::’)[-1].to_s.downcase.to_sym
z metody inherited było wykonywane tylko w przypadku jeśli w klasie potomnej nie została wywołana metoda table_name.
Czy da się takie coś zrobić?
W tej chwili działa to tak, że wykonywana jest z inherited, a później nadpisywana przez wywołanie w klasie potomnej.