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

时间:2012-04-02 11:30:55

标签: ruby-on-rails activerecord

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

1 个答案:

答案 0 :(得分: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