2012-02-03 83 views
0

可能重复:
What does ||= mean?|| =做什么?

this前一个问题,我问了一下关联后,用户,评论和投票模型的有效途径。投票模式有一个极性列,其中存储了投票(+1)和投票下降(-1)值。它还有一个总计列,其中存储了帖子和评论中所有投票的总和。

有人给我一个详细的答案,但我不明白这个部分(特别是在self.total ||= 0self.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

@Romain 46好,我实际上指的是整个代码(将特别着重于'|| =')。 – alexchenco 2012-02-03 11:32:15

+0

有人劫持了这个头衔。 – alexchenco 2012-02-04 00:47:08

回答

2
  1. self.total ||= 0将设置如果self.total为零或错误,则该值为0。这对刚刚创建模型时的初始运行很有帮助,并且定义了total列的默认值。你不想做nil + 1nil - 1

  2. self.total += self.polarityself.total = self.total + self. polarity

  3. 为什么before_create缩写形式,因为它在逻辑上是有意义的尝试写入数据库之前有一个适当的正确的价值观。

进一步阅读:http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html

2

self.total || = 0意味着如果self.total是没有价值(无),将设置值设置为0

希望这将有所帮助,我会尽我所能来帮助你让我思考其他。

对于|| =做的,我觉得这个环节将是有益的你 - > http://railscasts.com/episodes/1-caching-with-instance-variables