什么是|| =做什么?

时间:2012-02-03 11:15:55

标签: ruby-on-rails

  

可能重复:
  What does ||= mean?

this上一个问题中,我询问了关联Post,User,Comment和Vote模型的有效方法。投票模型具有极性列,其存储向上投票(+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的初学者)吗?

2 个答案:

答案 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,则
  1. self.total会将值设置为0。这对刚刚创建模型时的初始运行很有用,并且没有定义total列的默认值。您不希望执行nil + 1nil - 1

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

  3. 的缩写
  4. 为什么before_create,因为在尝试编写数据库之前,在逻辑上有合适的值。

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