我有一个遗留数据库,其中两个非常相似的对象类型存储在不同的表中,具有不同的列和关系。有一个父类用于弥补这一差距,但我有点不知道如何实现它来模仿子类。理想情况下,像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