2016-07-29 5 views
0

find_with_reputationまたはcount_with_reputationのメソッドを実行しようとすると次のエラーが発生します。Rails - ActiveRecordレピュテーションシステムスコープクエリの問題

ArgumentError: Evaluations of votes must have scope specified

次のように私のモデルが定義されている:

class Post < ActiveRecord::Base 
    has_reputation :votes, 
      :source => :user, 
      :scopes => [:up, :down] 

私は、たとえば実行しようとするとエラーが発生します

Post.find_with_reputation(:votes, :up) 

または

Post.find_with_reputation(:votes, :up, { order: "likes" }) 

残念ながら、 documentationこのエラーを回避する方法についてはあまり明確ではありません。それだけで次のようにメソッドが実行されなければならないと述べている:任意の助けが最も理解されるであろう

User.find_with_reputation(:karma, :all) 

:なしモデルで

ActiveRecord::Base.find_with_reputation(:reputation_name, :scope, :find_options) 

はActiveRecordのレピュテーションシステムのような方法でうまく動作スコープ。

答えて

0

解決策を見つけました。 ActiveRecordレピュテーションシステムがrs_reputationsテーブルのレピュテーション名とスコープ名を結合しているようです。だから私の場合、:upまたは:downのいずれかのスコープを持つ:votesの評判名は、それぞれ:votes_up:votes_downという名前になります。

したがって、スコープモデルのためのfind_with_reputationまたはcount_with_reputation方法は、次のように構築する必要があります:あなたが取得するconditionsオプションを追加する必要があります

Post.find_with_reputation(:votes, :up, { conditions: ["votes_up > ?", 0] }) 

注:代わりに

Post.find_with_reputation(:votes_up, :all, { conditions: ["votes_up > ?", 0] }) 

を所望の結果を得なければならない。そうでなければ、例えば投票が肯定的であるモデルの代わりに、モデルのすべてのレコードをもたらす。