わかりました。レビューモデルと投票モデルがあります(賛成票と反対票は、単一の変数「いいね」でモデル化されています。真の場合は賛成、偽の場合は反対です)。投票はhas_many関係であり、多態的です(後でレビューだけでなく、これを使用できるようにしたいと思います)。
したがって、レビューモデルには次の行があります
has_many :votes, :as => :votable
そして、投票モデルは次のように定義されます
class Vote < ActiveRecord::Base
belongs_to :votable, :polymorphic => true
belongs_to :user
def upvote?
like
end
def downvote?
!like
end
end
これで問題ありません。賛成、反対、投票を削除できます。しかし、私は賛成票と反対票に基づいたスコアを生成しようとしています(単に賛成票-今のところ反対票)。これを行うために、レビューモデルに以下を追加しました
def score
up = 0
down = 0
self.votes.each do |v|
if v.upvote?
up += 1
elsif v.downvote?
down += 1
end
end
up-down
end
しかし、私は常に答えとして0を返します。up変数またはdown変数をその外側に設定して通過させることができるため、エラーはループ内にあります。それは私を狂気に駆り立て始めました、そして私はどこが間違っているのか分かりません。