2013-06-01 2 views
1

루비 1.9.3-p327, 레일 3.2.13ActiveRecord : 키워드 토큰을 메서드로 사용할 수 없습니까?

나는 다음과 같은 모델을 가지고 :

class ActivationToken < ActiveRecord::Base 
    before_save :create_token 

    attr_reader :token 

    private 

    def create_token 
     self.token = 'abc123' 
    end 
end 

나는 새로운 ActivationToken 레코드를 생성, 나는 nil을 얻을 my_token.token를 호출하지만 참조하는 경우가

해시로서, my_token[:token] 나는 값을 얻는다.

왜 그럴까요?

+0

'attr_reader : token'을 제거한 후'my_token.token'으로 액세스 해보십시오. – kiddorails

+0

attr_accessor로 설정하면 작동합니다. 값을 쓰기 가능하게 만들고 싶지 않으므로 attr_reader로 선언하십시오. 어떤 종류의 이름 충돌 같은 느낌이지만, 어디서 그런지 알 수는 없습니다. SQLite 로컬로 사용하고 있습니다. –

+0

아래에 답변이 추가되었습니다. 아마도 도움이 될 것입니다 – kiddorails

답변

0

제거 attr_reader :token
레일 (4.0 이전)는 쓰기와 해시를 통해 액세스 할 수있는 속성을 허용 attr_accessible를 사용합니다.
레일즈 4.0은 같은 목적으로 strong parameters을 사용합니다.

에 대해 attr_readerattr_accessible을 제거하면 속성을 명시 적으로 쓸 수 없지만 읽을 수는 있습니다. 그것은 당신이 원하는 것입니다.

+0

ActivationToken과 토큰이 어떻게 든 경쟁 할 수 있을지 궁금합니다. 나는 코드의 의도를 문서화 할 때 attr_reader를 갖는 것을 좋아한다. 나는 지금 해쉬 표기법을 고수하고 괜찮지 만, 왜 그렇게하는지 이해하고 싶다. 몇 가지 더 시도하면 업데이트됩니다. –

관련 문제