【发布时间】:2012-06-11 13:13:48
【问题描述】:
我听说 ruby 对象只是我们可以存储实例变量(和类指针)的地方。所以:
class Person
def initialize(age)
@age = age
end
end
现在如果我们运行:
p = Person.new(101)
然后我们得到:
#<Person:0x86cf5b8 @age=101>
太好了,age 属性按预期存储为 实例变量。但是,如果我们将模型转换为从 ActiveRecord 继承,情况会有所不同。现在,在实例化一个新的 Person 之后,我们会看到:
# timestamps removed
#<Person id: 1, age: 101 >
age 属性似乎不再是实例变量。那么这里到底发生了什么?
我知道我们可以访问 @attributes 实例变量,它包含所有属性和值的散列,所以我想知道 ActiveRecord 是否可能修改控制台输出以以这种方式呈现对象属性。
是否可以在不使用 ActiveRecord 的情况下实例化属性作为属性而不是实例变量的 Ruby 对象?
【问题讨论】:
-
在您的问题中,非 AR 类中的“属性”与“实例变量”是什么关系?
-
Dave Thomas 在视频中指出,对象只是实例变量的集合。然而 ActiveRecord 对象并不将它们的属性存储为实例变量,所以这让我有点困惑。
-
为什么? AR 对象不是普通的 Ruby 对象,应该持久化的属性必须与不应该持久化的属性区分开来。 可以使用其他实现机制,但没有使用。
-
AR object aren't plain Ruby objects- 谢谢,这真的解释了。当我开始学习 Ruby 时,我忽略了很多这些东西。
标签: ruby-on-rails ruby activerecord