2010-11-20 4 views
4

ARのfind_byメソッドがMethod Missing技法を使用しているため、実際にはalias_methodでエイリアスすることはできません(メソッドが存在しないため!)。それともそうだ。railingのfind_byメソッドActiveRecord

誰でもこの方法を知っていますか?私は何をしようとしている、いくつかの詳細を提供するために、

はこの..です

私は、ARモデル、ユーザーを持っているが、それはそれのいくつかは、セカンダリデータソースからの属性だ補強する - これはする必要がありますデフォルトの動作最初はこれを達成するために、after_findコールバックを使用し、その時点で2番目のデータソースから新しい属性を追加しました。

問題は、2番目のデータソースを増やすことなく、find_byメソッドを時々使用できるようにすることです。

ここで、別名を使用してfind_byメソッドの2つのフレーバーfind_byとfind_without_byを作成することを考えました。

レールにつながる、あなたがalias_methodでワイルドカードを使ってみましょういくつかの魔法のタレがあれば理想的には次のようになります。

alias_method:find_withoutの*、:任意の提案*

を見つけますか?必要に応じて具体的な点を明確にすることができます。

ありがとうございます!

+0

私はあなたが名前のスコープでこれを達成することができると思います。あなたはRails 2または3にいますか? –

+0

2.3.5、もう少し詳しく説明できますか?以前はスコープキーワードを使用していませんでした。 – CambridgeMike

答えて

3

あなたはあなた自身のモデルでmethod_missingを定義し、それがfind_without_abcコールの場合は不足している通常の方法にオフに渡すことができます。

MyModel < ActiveRecord::Base 
    def method_missing(method, *args) 
    return super(method, args) if method =~ /find_without/ 

    # Your custom find code is here... 
    end 
end 
+0

これはいいアイデアです。これを使った唯一のプッシュバックは、私の「第2のデータベースからのデータを補強する」ことをモジュールに分離して、モジュールに再利用できるようにすることでした。多分これはパイプの夢のビットです。 – CambridgeMike

+0

ああ、問題は、含まれているモジュールから "スーパー"を呼び出すことは、私が期待したことをしていない、つまり "見つからない"というエラーがあるように見えるということです – CambridgeMike

+1

あなたのモジュールはどのように見えますか? –

関連する問題