2012-01-08 2 views
0

모델의 after_validation 콜백에서 모델의 속성을 수정하려고 시도하지만 모든 @attributes가 nil을 반환하므로 메소드가 실패합니다.after_validation 블록에서 모델의 액세스 속성

저장하기 전에 ActiveRecord의 @attributes에 액세스하려면 어떻게해야합니까? 클래스 자체의 메서드에서 액세스하려고 시도하고 있습니다.

class Business < ActiveRecord::Base 
      attr_accessible :latitude, :longitude 
      geocoded_by :address 
      after_validation :geocode 

      # Returns a human readable address from our various fields 
      def address 
       # All of these are nil when this gets called, from the geocode block which gets called by after_validation 
       [self.street + self.street2, self.city, self.state].compact.join(', ') 
      end 
    end   
+0

후 일부 코드. –

+0

그다지 그다지 게시하지는 않지만 확실하다. :) – 1dayitwillmake

답변

1

인스턴스 변수에 저장하는 작업을해야합니다 :

after_validation {|x| @this = x; geocode} 

def address 
    [@this.street + @this.street2, @this.city, @this.state].compact.join(', ') 
end 
+0

이 대답에 대해 좀 더 자세히 설명해 줄 수 있습니까 (의미론,이 접근법의 사고 방식, 내 접근 방식이 작동하지 않는 이유)? – 1dayitwillmake

+0

나는 왜 당신의 접근 방식이 효과가 있는지 모르겠습니다. 나는 기본적인 after_validation 구현을 테스트하고 메소드에서 logger.debug (self.content)를 호출했고 예상대로 작동했다. 내 유일한 추측은 지오 코드가 속성을 볼 수 없게하지만 그 방법을 보지 않고 확실하지 않다는 것입니다. 즉, 지오 코딩이 수행중인 작업과 관계없이 내용을 보유하고 인스턴스의 변수 대신 객체에 직접 액세스하는 인스턴스 변수를 작성하면 문제를 해결해야합니다. – josephrider