2009-09-27 14 views
8

Bir göç içine bir yöntemi tanımlamak çalışıyorum ama tanımlanmamış bir yöntem hatası alıyorum: Bu kötü kokan çünkütanımlanması yöntemleri

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

yerine başka bir yerde bunu tanımlamak istemem Gerçekten de bu özel göç ile uygulamanın geri kalanıyla bağlantı kuruyor.

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 

Burada bir şey eksik:

Açık olmak gerekirse, benim göç gibi görünür? Bunu neden böyle tanımlayamıyorum?

cevap

8

Hata iletisinde görüldüğü gibi, kod, geçiş sınıfınızın içinden değil, bağlantı bağdaştırıcısının içinden çağrılmaz. Emin değilim, ama bu küçük bir değişiklik çalışması gerekir: Ben senin yöntem statik yapılmış ve statik bir şekilde adlandırılan

class DoSomethingSpectacular < ActiveRecord::Migration 

    def self.up 
    DoSomethingSpectacular.do_something_specific(1, 2) 
    end 

    def self.down 
    end 

private 

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

end 

Not. Bu, herhangi bir sınıf kapsamı konularının üstesinden gelmelidir.

+0

Evet, adaptörün içinden ne dediğini anlamadım, ancak yine de kapsamı içinde olması gerektiğini düşündüm. Her neyse, şimdi bir sınıf undefined yöntemi 'do_something_specific' Class: Class –

+0

D'oh özür dilerim. 'Self.up' statik bir yöntem olduğu için,' class'a yapılan çağrı 'Sınıf' ve 'DoSomethingSpectacular' değil. Örnek kodu güncelledim. – Koraktor

+2

"DoSomethingSpectacular." Öğesini güvenle kaldırabileceğinizi düşünüyorum. self.up içinde – khelll