Rails:如何为抽象类实现find*



我有一个遗留数据库,其中两个非常相似的对象类型存储在不同的表中,具有不同的列和关系。有一个父类用于弥补这一差距,但我有点不知道如何实现它来模仿子类。理想情况下,像find_all_by_*这样的方法应该在两个子类上运行,并在一个数组中返回所有结果。有没有一些规范的方法可以做到这一点,比复制find的代码更简单?

好的,有趣的问题。不确定是否有比这更好的解决方案,但我会使用一些缺少魔力的方法。

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

最新更新