2009-09-27 2 views
8

내가 마이그레이션 내부의 메소드를 정의하기 위해 노력하고있어,하지만 난 정의되지 않은 방법 오류 받고 있어요 : 그것은 '아무튼 때문에,정의 방법

undefined method 'do_something_specific' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x4868018> 

는 차라리 다른 곳을 정의하지 않는 게 좋을을 이 응용 프로그램의 나머지 부분과 관련이 있습니다.

class DoSomethingSpectacular < ActiveRecord::Migration 

    def self.up 
    do_something_specific(1, 2) 
    end 

    def self.down 
    end 

private 

    def do_something_specific(p_1, p_2) 
    # something happens here... 
    end 

end 

내가 여기서 뭔가를 놓치고 있습니까 :

는 명확하게하기 위해, 내 마이그레이션과 같이 보입니다? 왜 이렇게 정의 할 수 없습니까?

답변

8

오류 메시지에서 볼 수 있듯이 코드는 마이그레이션 클래스 내에서가 아니라 연결 어댑터 내부에서 호출됩니다. 확실하지는 않지만이 작은 변경은 작동해야합니다.

정적 메서드로 만들었고 정적 메서드로 호출했습니다. 이것은 모든 클래스 범위 문제를 극복해야합니다.

+0

그래, 나는 그것이 어댑터 안에서 무엇을 부르는 지 이해하지 못했다. 그러나 나는 그것이 그것의 범위 안에 있어야한다고 생각했다. 어쨌든, 이제 클래스에 대한 정의되지 않은 메소드 'do_something_specific'오류가 발생합니다. Class –

+0

미안합니다. 'self.up'는 정적 메서드 자체이기 때문에'class'를 호출하면'DoSomethingSpectacular'가 아닌'Class'가 반환됩니다. 샘플 코드를 업데이트했습니다. – Koraktor

+2

'DoSomethingSpectacular'를 안전하게 제거 할 수 있다고 생각합니다. 셀프 업 – khelll