Frage Erstellen einer Ruby-Klasse im laufenden Betrieb ohne Eval


Ich muss eine Ruby-Klasse im laufenden Betrieb erstellen, d. H. Dynamisch, von der abgeleitet wird ActiveRecord::Base. ich benutze eval vorerst:

eval %Q{
  class ::#{klass} < ActiveRecord::Base
    self.table_name = "#{table_name}"
  end
}

Gibt es eine äquivalente und mindestens ebenso prägnante Möglichkeit, dies ohne Verwendung zu tun? eval?


5
2018-06-11 12:46


Ursprung


Antworten:


Du kannst den ... benutzen Klasse Klasse, von welcher Klassen Instanzen sind. Verwirrt noch? ;)

cls = Class.new(ActiveRecord::Base) do
  self.table_name = table_name
end

cls.new

14
2018-06-11 12:48



Natürlich gibt es :)

class Foo
  class << self
    attr_accessor :table_name
  end
end

Bar = Class.new(Foo) do
  self.table_name = 'bars'
end

Bar.table_name # => "bars"

4
2018-06-11 12:48