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