在rails模型中测试getter/setter对时,我发现了一个我一直认为奇怪且不一致的行为的好例子.
在这个例子中,我处理的是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
...结果完全一样,我得到了父文件夹的名称.然而,在getter方法中,如果我使用...
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
...然后就行了.
所以,我的问题是,为什么你需要声明自己.方法,为什么只能使用局部变量?
似乎ActiveRecord中对self
的需求/使用是不一致的,我想更好地理解这一点,所以我不觉得我总是在猜测是否需要声明self .什么时候应该/不应该在ActiveRecord模型中使用self?