2011-07-25 9 views
2

オブジェクトが投票された後にActiveModel callbackを呼び出すには、私のアプリでモデルdoesnt provide like a vote model or callbackを使用するために使用している宝石(voteable_mongo)が必要ですコールバックを作成できますか?Rails、コールバックを作成する

set_callback(:vote, :before) do |object| 
    object.do_something 
end 

明らかにその投票行動は、私が作ったが、私が使用している宝石は、あなたが適切にコールバックをトリガするために、このメソッドを拡張する方法を、this methodを持っていますか?

答えて

1

ソースはここにあなたが何ができるかだとプラグインの例を取る:

class Post 
    include Mongoid::Document 
    include Mongo::Voteable 
    extend ActiveModel::Callbacks 

    define_model_callbacks :vote 

    # set points for each vote 
    voteable self, :up => +1, :down => -1 

    def vote(options, value = nil) 
    _run_vote_callbacks do 
     super(options, value) 
    end 
    end 

end 

私は、これは正しくか仕事に行くが、最悪の場合、あなたにある場合はわからないので、私はこのコードを実行しませんでしたalias_method_chainを使用して投票方法の別名を指定するか、ソースをコピーして_run_vote_callbacksブロック内にコピーして貼り付けてください(実際は本当に醜いですが、それは解決策です)。

EDIT

上記のコードは動作しない場合、これはまた、alias_method_chainを使用して行うことができます

class Post 
    include Mongoid::Document 
    include Mongo::Voteable 
    extend ActiveModel::Callbacks 

    define_model_callbacks :vote 

    # set points for each vote 
    voteable self, :up => +1, :down => -1 

    alias_method_chain :vote, :callback 

    def vote_with_callback(options, value = nil) 
    _run_vote_callbacks do 
     vote_without_callbacks(options, value) 
    end 
    end 

end 
関連する問題