При тестировании пары геттер / сеттер в модели рельсов я нашел хороший пример поведения, которое я всегда считал странным и непоследовательным.
В этом примере я имею дело с class Folder < ActiveRecord::Base
.
Folder belongs_to :parent, :class_name => 'Folder'
В методе получения, если я использую:
def parent_name
parent.name
end
... или ...
def parent_name
self.parent.name
end
... результат точно такой же, я получаю имя родительской папки. Однако в методе получения, если я использую ...
def parent_name=(name)
parent = self.class.find_by_name(name)
end
... родитель становится нулем, но если я использую ...
def parent_name=(name)
self.parent = self.class.find_by_name(name)
end
... тогда тогда это работает.
Итак, мой вопрос: зачем вам иногда нужно объявлять self.method и почему вы можете просто использовать локальную переменную?
Кажется, что необходимость / использование self
в ActiveRecord противоречива, и я хотел бы понять это лучше, поэтому я не чувствую, что всегда гадаю, нужно ли мне объявить себя или нет. Когда следует / не следует использовать self в моделях ActiveRecord?