Rails 2.2 - динамически создайте новый класс AR :: Base - PullRequest
0 голосов
/ 06 марта 2019

Я использую Ruby 1.8.6 и Rails 2.2 для старого приложения. Я знаю я знаю.

Я создаю плагин с именем "act_as_squirrel", который создает другую таблицу для класса вызывающего, чтобы хранить пользовательские данные и разрешить поиск в полном тексте.

Все средства создания таблиц работают нормально, но я хочу, чтобы я создал новый ActiveRecord :: Base-наследующий класс, называемый Squirrel.

Так, например, класс Resource вызывает acts_as_squirrel("name", "keywords"). Мой код act_as_squirrel делает (если она не существует) таблицу squirrel_resources с id, record_id, name, keywords столбцами. Это все хорошо.

Но следующее, что ему нужно сделать, - это определить новый класс ActiveRecord :: Base для использования с этой вновь созданной таблицей. Поэтому в этом случае я хочу создать класс SquirrelResource, который соответствует таблице squirrel_resources.

Это то, чем я сейчас занимаюсь, и похоже, что оно не работает:

def acts_as_squirrel(options={})
  #create the Squirrel<ClassName> class which goes with this class, eg SquirrelResource to go with Resource.  This is an AR:Base class
  unless defined?("Squirrel#{self.name}")
    eval "
    Squirrel#{self.name} = Class.new(ActiveRecord::Base) do
      extend SquirrelClassMethods
      include SquirrelInstanceMethods
    end
    "
  end
end

После этого кажется, что класс SquirrelResource не был определен.

Каков наилучший способ динамического добавления другого класса таким способом, который обычно делает его доступным для среды, так что он похож на любой другой класс Ar :: Base?

...