2016-03-19 6 views
0

私はサルパッチhttps://stackoverflow.com/a/21446021にこの答えを見ています。宝石の中で1つのメソッドをモンキーパッチすると、私のアプリにアクティブなレコードがあることを知らせることができますか?

この例では、gem(他の誰かのライブラリ)にメソッドsomeMethod()があり、最終的には私がパッチしたメソッドを呼び出します。

私のアプリは、この

activeRecord = ... # gets an ActiveRecord object that I want to update 
options = {..} 
@gem_object = SomeLibrary::Class.new(options) 

@gem_object.someMethod() 

今のsomeMethod(ように見える)は、最終的にパッチを当てたメソッドを呼び出すために起こっています。パッチを適用したメソッドにactiveRecordを認識させ、更新できるようにしたい。 someMethod()が呼び出されたときにスタックトレース内のすべてのメソッドにパラメータとしてactiveRecordを追加することを避けることができるかどうかは疑問です。

+0

私はそこにオブジェクトを渡す理由はありません。パッチを当てた方法でモデルにアクセスできます。 –

+0

SQLを再実行しないでしょうか?私のアプリでは、すでにアクティブなレコードオブジェクトのインスタンス化があります。 – gravitas

+0

それはSQLを再実行するでしょうが、それは本当に悪いことですか?クエリを2回対して2回実行すると、実際にどれだけのパフォーマンスが得られますか?あなたのレールコンソールでクエリ時間を見ることができます - 単純なクエリはミリ秒かかる。 –

答えて

2

私は

class StoreRecord 
    def self.activeRecord 
    @active_record 
    end 
    def self.activeRecord=(record) 
    @active_record = record 
    end 
end 

ので、あなたのコードが

StoreRecord.activeRecord = ... # gets an ActiveRecord object that I want to update 
options = {..} 
@gem_object = SomeLibrary::Class.new(options) 

@gem_object.someMethod() 

になり、あなたのパッチを適用しメソッドでStoreRecord.activeRecordにアクセスすることができ、プレーンクラスに保存したいです。

関連する問題