2009-09-27 14 views
8

próbuję zdefiniować metodę wewnątrz migracji, ale jestem coraz niezdefiniowany błąd metoda:Definiowanie metod w Rails migracje

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

Wolałbym nie definiują go gdzie indziej, bo nie robi” t naprawdę odnoszą się do reszty aplikacji, tylko do tej konkretnej migracji.

Żeby było jasne, mój migracja wyglądał:

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 

Am I brakuje czegoś tutaj? Dlaczego nie mogę tego tak zdefiniować?

Odpowiedz

8

Jak widać z komunikatu o błędzie, kod nie jest wywoływany z poziomu klasy migracji, ale wewnątrz adaptera połączenia. Nie jestem pewien, ale ta mała zmiana powinna zadziałać:

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 

Zauważ, że zrobiłem twoją metodę statyczną i wywołałem ją w sposób statyczny. To powinno przezwyciężyć wszelkie problemy z zakresem klasy.

+0

Tak, nie rozumiałem, jak to było wywoływanie go z adaptera, ale doszedłem do wniosku, że powinno być w jego zasięgu. W każdym razie, teraz otrzymuję błąd nieokreślonej metody "do_something_specific" dla klasy: Class –

+0

D'oh przepraszam. Ponieważ 'self.up' jest samą metodą statyczną, wywołanie' class' zwróci 'Class', a nie' DoSomethingSpectacular'. Zaktualizowałem przykładowy kod. – Koraktor

+2

Myślę, że możesz bezpiecznie usunąć "DoSomethingSpectacular". w self.up – khelll