||= 是 Ruby 编程语言中的一种操作符。它被称为“或等于”操作符。

9 浏览
0 Comments

||= 是 Ruby 编程语言中的一种操作符。它被称为“或等于”操作符。

在这个之前的问题中,我询问了一种有效的方法来关联帖子、用户、评论和投票模型。投票模型有一个极性列,用于存储投票为+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
0 Comments

`||=`是Ruby中的一个操作符,用于给变量赋值。它的作用是,如果变量没有值(为nil),则将其赋值为指定的值。

在给出的代码中,`self.total ||= 0`的意思是,如果`self.total`没有值(为nil),则将其赋值为0。

这种用法可以用于确保变量总是有一个默认值,以防止出现空值的情况。

关于`||=`的更多信息,你可以参考这个链接:[http://railscasts.com/episodes/1-caching-with-instance-variables](http://railscasts.com/episodes/1-caching-with-instance-variables)

0
0 Comments

问题的出现原因是为了在模型刚创建时,确保在数据库写入之前,total这个属性有一个默认值,避免进行nil + 1或者nil - 1的操作。解决方法是使用self.total ||= 0来设置total的值,如果total为nil或者false,则将其设置为0。

另外,self.total += self.polarity是self.total = self.total + self.polarity的简写形式。这段代码的作用是将total的值与polarity相加并重新赋值给total。

为什么要在before_create中使用这些代码呢?因为在尝试写入数据库之前,将正确的值放在适当的位置是合乎逻辑的。

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

0