0
我有一个名为投票模型,这是什么vote.rb样子:在修改另一个模型(Rails)列的模型中使用回调?
class Vote < ActiveRecord::Base
belongs_to :votable, :polymorphic => true
belongs_to :user
before_create :update_total
protected
def update_total
self.total ||= 0
self.total += self.polarity
end
end
(这是多态的,因为它也属于所谓的评论另一个模型)。
每次投票创建时,总价值都会更新。例如,Vote.create(:polarity => 2)
,会产生:polarity => 2, :total => 2
我才意识到,这是没有意义的,因为:polarity
永远等于:total
。我真正想要做的是让total
的模型投票属于;在这种情况下邮政和评论(投票属于发布和后有很多票),使每一个投票创建时间,在后total
列将被更新。就像这样:
5月13日
Post.total = 3 (:id => 2)
Vote.polarity = 1 (:id => 1)
Vote.polarity = -1 (:id => 2)
Vote.polarity = 3 (:id => 3)
5月14日
Post.total = 4 (:id => 2)
Vote.polarity = 1 (:id => 1)
Vote.polarity = -1 (:id => 2)
Vote.polarity = 3 (:id => 3)
Vote.polarity = 1 (:id => 4)
对不起,这可能是一个愚蠢的问题,但我必须为Post和Comment模型创建'total'列首先正确吗? – alexchenco 2012-02-07 08:10:42
是的,你需要为你使用的所有可投票模型创建总列数 – 2012-02-07 08:15:20
不一定你总是可以检查“total”是否被定义,如果你只是特意需要'post'投票。 before_create:update_total,:if =>“self.votable.defined?(:total)” – 2012-02-07 11:35:58