为什么第一个代码(带有self)有效,但第二个无效?
category_uri
是模型的属性
def set_uri
self.category_uri = self.category_uri.join('-').downcase
self.save!
end
没有自我
def set_uri
category_uri = category_uri.join('-').downcase
save!
end
为什么第一个代码(带有self)有效,但第二个无效?
category_uri
是模型的属性
def set_uri
self.category_uri = self.category_uri.join('-').downcase
self.save!
end
没有自我
def set_uri
category_uri = category_uri.join('-').downcase
save!
end
def set_uri
self.category_uri = self.category_uri.join('-').downcase
self.save!
end
方法 'set_uri' 将被调用,如:instance.set_uri,所以在这种情况下,'self' 被设置为调用该方法的实例。但是在没有'self'的第二个代码中,'category_uri'实际上被视为局部变量。事实上,Ruby 会不明确地将 'self' 设置为方法本身,而不是在这种情况下调用它的实例,所以它不会工作。
在第二种情况下,解释器将category_uri = ...
其视为局部变量赋值。这就是为什么如果你想调用 setter 方法(带有尾随的方法=
),你必须使用self
.
Marek 已经说过第二个不起作用的原因。
这两段代码都不擅长这个操作属性的目的。更好地使用write_attribute
以消除混淆。
我的重构建议
def set_uri
write_attribute(:category_uri, category_uri.join('-').downcase)
save!
end