在测试Rails模型中的getter/setter对时,我发现了一个好的例子,它展示了我一直认为很奇怪和不一致的行为。
在这个例子中,我正在处理 class Folder < ActiveRecord::Base
。
Folder belongs_to :parent, :class_name => 'Folder'
在getter方法中,如果我使用:
def parent_name
parent.name
end
...or...
def parent_name
self.parent.name
end
...结果完全一样,我获得了父文件夹的名称。但是,在getter方法中,如果我使用...
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,而不能只使用局部变量呢?
看起来,在ActiveRecord中需要/使用self
是不一致的,我想更好地理解这一点,这样我就不会总是猜测是否需要声明self。在ActiveRecord模型中什么情况下应该/不应该使用self?
self.
限定符?调用类属性访问器方法时如何处理?什么时候应该在 Ruby 中使用self
?为什么在没有使用self
的情况下调用本地方法会产生不同的行为?在 Ruby 中,什么时候应该在类中使用self.
?如果我们定义了一个名为c=
的方法,为什么不能通过c = 3
调用它? - Jörg W Mittag