【发布时间】:2012-05-28 22:46:18
【问题描述】:
好的,所以我有一个评论模型和一个投票模型(通过单个变量“喜欢”建模的 Upvotes 和 Downvotes,如果它为 true,则为 upvote,如果为 false,则为 downvote。)。投票是一个 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 变量设置为它之外的任何内容并且它们被传递。它开始让我发疯,我不知道我哪里出错了。
【问题讨论】:
-
评论模型与用户/投票的关系是什么?
-
关系是
has_many :votes, dependent: :destroy在用户模型中还有创建和销毁投票的方法,检查他们的用户是否为评论投票,并检查他们的投票方式(使用upvote? 和 downvote? 投票方法)
标签: ruby-on-rails ruby-on-rails-3 associations iteration