14

在我的整个应用程序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可以用来阻止保存,但如果没有给出名称,我想用默认值保存。

导轨 3.0.7。

4

1 回答 1

24

通常的用途self是强制 Ruby 将其识别为方法调用,而不是将其误解为变量。在没有事先了解名为 的方法的情况下day=day = "x"Ruby 将其视为变量赋值。self.day = "x"始终是方法调用。

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

于 2012-04-12T16:06:05.103 回答