可能重复:
What does ||= mean?
在this上一个问题中,我询问了关联Post,User,Comment和Vote模型的有效方法。投票模型具有极性列,其存储向上投票(+1)和向下投票(-1)值。它还有一个总计列,用于存储帖子和评论中所有投票的总和。
有人给了我一个详细的答案,但我无法理解这一部分(特别是self.total ||= 0
和self.total += self.polarity
部分以及为什么before_create
?):
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
任何人都可以向我解释上面的代码(我是Rails的初学者)吗?
答案 0 :(得分:2)
self.total || = 0表示如果self.total没有值(nil),则将值设置为0
希望它会有所帮助,我会尽力帮助你让我为别人思考。
对于|| = do,我认为此链接对您有用 - > http://railscasts.com/episodes/1-caching-with-instance-variables
答案 1 :(得分:2)
self.total ||= 0
为nil或false,则 self.total
会将值设置为0。这对刚刚创建模型时的初始运行很有用,并且没有定义total
列的默认值。您不希望执行nil + 1
或nil - 1
self.total += self.polarity
是self.total = self.total + self. polarity
为什么before_create
,因为在尝试编写数据库之前,在逻辑上有合适的值。
进一步阅读:http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html