Rails: Как реализовать find * для абстрактного класса? - PullRequest
2 голосов
/ 02 апреля 2012

У меня есть устаревшая БД, в которой два довольно похожих типа объектов хранятся в разных таблицах с разными столбцами и отношениями. Для преодоления разрыва используется родительский класс, но я немного растерялся, как реализовать его для эмуляции дочерних классов. В идеале методы типа find_all_by_* должны выполняться в обоих подклассах и возвращать все результаты в одном массиве. Есть ли какой-то канонический способ сделать это, более простой, чем копирование кода find?

1 Ответ

0 голосов
/ 02 апреля 2012

Хорошо, интересный вопрос.Не уверен, что есть лучшее решение, чем это, но я бы использовал метод, пропускающий магию.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...