2010-03-12 4 views
4

ActiveRecord 속성의 인코딩을 수정해야하고 before_save 후크에서 수행하기로 결정했습니다. 그리고이 시점에서 나는 예상치 못한 특징을 발견했습니다. 애트리뷰트의 값을 변경하고 싶을 때 attribute_name=XY을 사용한 간단한 작업이 예상대로 작동하지 않았습니다. 대신에 나는 self[:attribute_name]=XY을 사용해야했습니다. 지금까지이 동작을 인식하지 못했고 AR.attribute_name=XY을 사용했습니다. 이것에 대한 이유는 무엇입니까? 이 행동은 후크 또는 다른 것과 관련이 있습니까? 설명 해줘서 고마워.before_save 후크의 ActiveRecord 속성 값 변경

답변

8

이 사실 루비 "기능"입니다 : #run에서

def value=(x) 
    p x 
end 

def run 
    value = 123 
end 

run 
# => 123 

위, 값을하는 것은 지역 변수가 아닌 다른 작업을 할당합니다. # value =를 호출하려면 수신자를 지정해야합니다.

def run 
    self.value = 123 
end 

run 
123 
# => nil 

희망이 있습니다.

+0

ActiveRecord 클래스가있는 예제가 더 좋을까요? – danielricecodes

+0

@ phonk64 질문은 레일즈 애플리케이션의 컨텍스트에 있지만 오류는 순수한 루비입니다. Rails 또는 ActiveRecord의 컨텍스트를 추가해도 중요한 새로운 지식이 추가되지는 않습니다. –

관련 문제