||= 是 Ruby 编程语言中的一种操作符。它被称为“或等于”操作符。
||= 是 Ruby 编程语言中的一种操作符。它被称为“或等于”操作符。
在这个之前的问题中,我询问了一种有效的方法来关联帖子、用户、评论和投票模型。投票模型有一个极性列,用于存储投票为+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初学者)?
`||=`是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)
问题的出现原因是为了在模型刚创建时,确保在数据库写入之前,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