2012-02-03 84 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