2012-04-02 6 views
2

私はかなり異なる2つのオブジェクトタイプが異なるテーブルに格納され、異なるカラムとリレーションシップを持つレガシーDBを持っています。ギャップを埋めるために使用される親クラスがありますが、私はそれを実装して子クラスをエミュレートする方法を少し失っています。理想的には、find_all_by_*のようなメソッドを両方のサブクラスで実行し、すべての結果を単一の配列に戻す必要があります。これを行う標準的な方法がありますか?the code of findより簡単ですか?Rails:抽象クラスのfind *を実装する方法は?

+0

DBにビューを作成する方法はありますか? – Yanhao

答えて

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 
+0

正解ですが、ブロック全体がバイパスされているようです: 'PG :: Error:ERROR:relation" "does not exist'。両方のメソッドの 'binding.pry'は役に立ちませんでした - Rails Webサーバーから呼び出されません。 – l0b0

関連する問題