Гарантия порядка загрузки в Rails

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

У меня есть два проекта Rails, мы назовем их Foo и Bar . Они используют одни и те же модели. Модели находятся в ссылках Foo и Bar на эти файлы.

Поведение конкретного метода в одной из моделей Foo должно отличаться в Bar:

В моделях проекта Foo/model_a.rb:

 class ModelA
  def method_a
    puts "default behavior here"
  end
end
  

Где-то на панели проекта:

 class ModelA
  def method_a
    puts "special behavior here"
  end
end
  

так что следующая строка кода:

 x = model_a.method_a
  

будет выполняться по-разному в одном проекте, чем в другом, без необходимости Bar связываться с моделями Foo. По-видимому, подобная ситуация существовала бы, если бы модели Foo были просто драгоценным камнем, хотя вопрос о порядке загрузки был бы другим.

Мои вопросы: где этот фрагмент кода должен находиться в панели проекта? И как мне гарантировать, что соединение Bar загружается последним, чтобы правильная функция выполнялась во время выполнения в project Bar?

Ответ №1:

Наследование? Это то, что вы описываете.

Если это активная запись, то вы можете принудительно ввести имя таблицы в приложении Bar, а затем использовать там дочерний класс.

В качестве альтернативы, но я думаю, что это хак. Создайте инициализатор с именем override_model_a

 require 'modelA'
class ModelA
  # then do your initializing, or include your module here
end
  

Ruby делает «последний выигрыш», поэтому, если вам требуется исходный класс, а затем переопределите его в инициализаторе, он будет делать то, что вы хотите.