2010-12-29 5 views
2

@column_name을 사용하여 레코드의 열 값에 액세스 할 수없는 이유가 혼란 스럽습니다. 인스턴스 변수가 아닌 이유는 무엇입니까? 액티브 레코드는 어떻게 그들의 가치를 지니고 있습니까? 열 이름에 'self'를 접두어로 사용해야하는 이유는 무엇입니까? 할당?ActiveRecord : 왜 자기. @ 대신 @ 대신 Model의 열 값에 액세스 하시겠습니까?

나를위한이 수수께끼를 분명히 해주셔서 감사합니다!

답변

2

@ foo를 잘못 입력하면 @foo 또는 @Foo를 의미 할 때 코드가 작동하지 않는 이유를 알아낼 수 있기 때문입니다. 이 방법은 내가 질문을 오해

편집

원하지 않았다 대신에 새 변수를 만드는 오타에 "어떤 방법 오류"가 없을 것입니다. 그들이 할 때 당신이 ActiveRecord 소스 안을 의미한다고 생각했습니다. 진짜 이유는 ActiveRecord가 거의 전적으로 리플렉션을 통해 구현되기 때문입니다. 데이터베이스에서 column_names를 검사 한 다음 method_missing을 통해 해당 필드에 대한 setter 및 getter를 동적으로 만듭니다. self.field를 사용한 후에 올바르게 기억한다면 @field를 설정합니다. @attributes [: field]와 같이 어딘가에 숨겨져있을 수 있습니다.

관련 문제