#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 делает «последний выигрыш», поэтому, если вам требуется исходный класс, а затем переопределите его в инициализаторе, он будет делать то, что вы хотите.