나는 루비 객체가 인스턴스 변수 (및 클래스 포인터)를 저장할 수있는 장소에 있다는 것을 읽었습니다. 그래서 : 이제Ruby 인스턴스 변수 대 ActiveRecord 속성
class Person
def initialize(age)
@age = age
end
end
우리가 실행하는 경우 :
p = Person.new(101)
그리고 우리가 얻을 :
#<Person:0x86cf5b8 @age=101>
위대한 예상대로 재산 나이는 예 변수로 저장됩니다 . 그러나 모델을 ActiveRecord에서 상속하도록 변환하면 상황이 조금 다르게 작동합니다.
# timestamps removed
#<Person id: 1, age: 101 >
나이 속성은 더 이상 인스턴스 변수로 나타납니다 이제 새로운 사람을 인스턴스화 한 후, 우리는이 볼 수 없습니다. 그래서 여기서 실제로 무엇이 일어나고 있습니까?
모든 속성과 값의 해시가 포함 된 @attributes
인스턴스 변수에 액세스 할 수 있다는 것을 알고 있습니다. 따라서 ActiveRecord가 콘솔 출력을 수정하여이 방법으로 개체 특성을 표시하는지 궁금합니다.
ActiveRecord를 사용하지 않고 프로퍼티가 인스턴스 변수가 아닌 속성으로 유지되는 Ruby 객체를 인스턴스화 할 수 있습니까?
질문에서 "AR"클래스가 아닌 "속성"대 "인스턴스 변수"는 무엇입니까? –
Dave Thomas는 비디오에서 객체는 인스턴스 변수의 모음임을 명시했습니다. 그러나 ActiveRecord 객체는 속성을 인스턴스 변수로 저장하지 않으므로 다소 혼란 스럽습니다. – stephenmurdoch
왜? AR 객체는 일반 Ruby 객체가 아니며 유지되어야하는 속성은 없어야하는 속성과 구별되어야합니다. 다른 구현 메커니즘 *이 사용되었지만 사용할 수 없습니다. –