У меня есть устаревшая БД, где два довольно похожих типа объектов хранятся в разных таблицах, с разными столбцами и отношениями. Для преодоления разрыва существует родительский класс, но я немного потерял его, чтобы реализовать его для эмуляции дочерних классов. В идеале такие методы, как find_all_by_*
, должны выполняться в обоих подклассах и возвращать все результаты в одном массиве. Есть ли какой-то канонический способ сделать это, проще, чем копирование the code of find
?Rails: Как реализовать find * для абстрактного класса?
2
A
ответ
0
Хорошо, интересный вопрос. Не уверен, есть ли лучшее решение, чем это, но я бы использовал немного недостающей магии.
class MyVirtualModel
def respond_to?(method, include_private = false)
if method.to_s =~ /^find.*/
RealModel1.respond_to?(method, include_private) && RealModel2.respond_to?(method, include_private?)
else
false
end
end
def method_missing(method, *arguments, &block)
if method.to_s =~ /^find.*/
resultset1 = RealModel1.send(method, arguments)
resultset2 = RealModel2.send(method, arguments)
return resultset1 + resultset2
end
end
end
+0
Аккуратное решение, но похоже, что весь этот блок обходит: 'PG :: Ошибка: ERROR: отношение" "не существует'. 'binding.pry' в обоих методах не помогло - они не вызываются веб-сервером Rails. – l0b0
Смежные вопросы
- 1. Как реализовать только определенные методы абстрактного класса?
- 2. Как реализовать методы абстрактного класса? (Java)
- 3. Как реализовать общие поля из абстрактного класса?
- 4. Как принудительно реализовать метод класса без объявления всего абстрактного класса?
- 5. Как реализовать интерфейс для абстрактного класса, который является ограничением?
- 6. Как реализовать список конкретного конкретного класса из абстрактного класса?
- 7. Рефакторинг для абстрактного класса
- 8. BindingFlags для абстрактного класса?
- 9. как написать лямбда-выражения для абстрактного класса
- 10. Как реализовать класс абстрактного класса Decorator без конструктора по умолчанию?
- 11. частичная реализация абстрактного метода абстрактного класса
- 12. Использование абстрактного класса java
- 13. Список массивов абстрактного класса?
- 14. Кэширование propertyinfo абстрактного класса
- 15. C++ - итератор для абстрактного класса
- 16. Шаблоны для создания абстрактного класса?
- 17. Как реализовать наследование класса-таблицы в Rails?
- 18. Deserializing JSON для абстрактного класса
- 19. Программа драйвера для абстрактного класса
- 20. Создание объекта для абстрактного класса
- 21. Реализация интерфейса для абстрактного класса Java
- 22. Есть ли способ реализовать метод абстрактного класса в java?
- 23. Как создать тест Junit для абстрактного класса?
- 24. Сериализация абстрактного класса
- 25. почему мы реализуем интерфейс для абстрактного класса
- 26. C# Наследование интерфейсов для абстрактного класса
- 27. Унаследовать от класса или абстрактного класса
- 28. как назвать метод абстрактного класса?
- 29. Может ли анонимный класс реализовать не абстрактный метод абстрактного класса?
- 30. Как сделать абстрактного члена класса?
Как насчет создания представления в БД? – Yanhao