Зачем использовать "я" для доступа к свойствам модели 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.

Ответ 1

Часто использование self заключается в том, чтобы заставить Ruby распознать это как вызов метода, а не неправильно интерпретировать его как переменную. Без предварительного знания метода, называемого day=, тогда day = "x" выглядит как Ruby как присвоение переменной. self.day = "x" всегда является вызовом метода.

Причина в том, что это проблема, потому что методы name и name= добавляются динамически после того, как файл класса пользователя был разобран. Первое, что делает Rails при использовании модели, - это методы для связанных полей базы данных, но это происходит после анализа файла user.rb.