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