为什么使用“self”访问ActiveRecord / Rails模型属性?

贯穿我的应用程序self. 没有必要引用用户的名字。 name工作正常。

为什么以下代码要求self按预期工作?

 class User< ActiveRecord::Base before_save :validate_name def validate_name if self.name.nil? || self.name.empty? self.name= "Mr. No Name" end end 

顺便说一下,我知道validates_presence_of可以用来阻止保存,但是如果没有给出名字,我想用默认保存。

Rails 3.0.7。

通常使用self是为了强制Ruby将其识别为方法调用而不是将其误解为变量。 如果没有一个名为day=的方法的先验知识,那么day = "x"看起来像Ruby一样变量赋值。 self.day = "x"始终是方法调用。

这是麻烦的原因是因为在解析User类文件之后动态添加了namename=方法。 Rails在使用模型时所做的第一件事是为相关数据库字段创建方法,但这会在解析user.rb文件之后发生。